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