php: преобразование миллисекунд в дату


У меня есть строка, равная дате, представленная как количество миллисекунд с эпохи Unix.

Я пытаюсь вывести его в d-m-Y.

Строка, которую мне дали, была "1227643821310", и мне сказали, что результат должен быть равен 2-12-2008, но я продолжаю получать результат 25-11-2008

Мой код выглядит следующим образом:

$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);

Есть идеи относительно того, почему это может быть?

Author: Jeff Winkworth, 2009-02-17

4 answers

Вы уже делаете это правильно, 1227643821 - это просто не 02-12-2008, это действительно 25-11-2008.

 36
Author: Patrick Glandien, 2009-02-17 18:04:59

Я только что добавил H:i:s, как в приведенном ниже примере:

$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
 14
Author: DanielOpaluwa, 2015-07-08 18:03:51

Единственное, что я могу придумать, это попытаться округлить десятичную часть, прежде чем преобразовывать ее в дату. Если это не изменит результат, то результат будет правильным.

 1
Author: Scott, 2009-02-17 17:59:33

Джефф, важно понимать, когда имеешь дело с метками времени: они представляют время, прошедшее с 0:00:00 01.01.1970 в GMT, а не в вашем часовом поясе (если, конечно, вы сами не находитесь в GMT).

1227643821 действительно представляет время по Гринвичу 20:10:21 25.11.2008.

Сейчас 25 ноября 2008 года в большинстве стран мира, однако в часовых поясах к востоку от Москвы (и в самом московском часовом поясе летом из-за перехода на летнее время) это уже 26 ноября. Поскольку самым "экстремальным" восточным часовым поясом является GMT+14, в мире нет места, где отметка времени 1227643821 может представлять дату позже 26-го числа.

Автор исходного значения, возможно, каким-то образом ошибся при работе с часовыми поясами. Или просто ошибся. Например, при вычислении значения на каком-то шаге добавлялись секунды вместо миллисекунд.

 1
Author: Ilya Birman, 2009-02-17 18:24:03