php: преобразование миллисекунд в дату
У меня есть строка, равная дате, представленная как количество миллисекунд с эпохи Unix.
Я пытаюсь вывести его в d-m-Y.
Строка, которую мне дали, была "1227643821310", и мне сказали, что результат должен быть равен 2-12-2008, но я продолжаю получать результат 25-11-2008
Мой код выглядит следующим образом:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d-m-Y", $seconds);
Есть идеи относительно того, почему это может быть?
4 answers
Вы уже делаете это правильно, 1227643821 - это просто не 02-12-2008, это действительно 25-11-2008.
Я только что добавил H:i:s, как в приведенном ниже примере:
$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
Единственное, что я могу придумать, это попытаться округлить десятичную часть, прежде чем преобразовывать ее в дату. Если это не изменит результат, то результат будет правильным.
Джефф, важно понимать, когда имеешь дело с метками времени: они представляют время, прошедшее с 0:00:00 01.01.1970 в GMT, а не в вашем часовом поясе (если, конечно, вы сами не находитесь в GMT).
1227643821 действительно представляет время по Гринвичу 20:10:21 25.11.2008.
Сейчас 25 ноября 2008 года в большинстве стран мира, однако в часовых поясах к востоку от Москвы (и в самом московском часовом поясе летом из-за перехода на летнее время) это уже 26 ноября. Поскольку самым "экстремальным" восточным часовым поясом является GMT+14, в мире нет места, где отметка времени 1227643821 может представлять дату позже 26-го числа.
Автор исходного значения, возможно, каким-то образом ошибся при работе с часовыми поясами. Или просто ошибся. Например, при вычислении значения на каком-то шаге добавлялись секунды вместо миллисекунд.