php: конвертировать миллисекунды в дату - PullRequest
39 голосов
/ 17 февраля 2009

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

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

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

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

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

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

Ответы [ 4 ]

39 голосов
/ 17 февраля 2009

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

17 голосов
/ 08 июля 2015

Я только что добавил H: i: s как в следующем примере:

$mil = 1227643821310;
$seconds = $mil / 1000;
echo date("d/m/Y H:i:s", $seconds);
1 голос
/ 17 февраля 2009

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

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

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

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

1 голос
/ 17 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...