Преобразование метки времени на сервере дает разные результаты в PHP и MySQL

Учти это. На своем сервере я конвертирую временную строку (UTC / GMT) следующим образом:

strtotime('Fri Feb 18 21:08:38 +0000 2011')

Мой сервер возвращается

1298063318

Это правильно, поскольку все unix timestamp конвертеры что я тестировал, возвращаю то же самое. И наоборот, если я вставлю не дату, а метку времени, мне вернется строка времени, как указано выше. Но если я конвертирую метку времени на моем сервере:

date("Y-m-d H:i:s", 1298063318); 

Я возвращаюсь на другую дату, чем ожидалось («Пт, 18 февраля, 21:08:38 +0000 2011»):

2011-02-18 22:08:38

Так что час перестал. Вероятно, это связано с тем, что часовой пояс моих серверов установлен на Europe / Paris, и, таким образом, он переводит метку времени в UTC / GTM + 1. Но MySQL, работающий на том же сервере и имеющий тот же часовой пояс, дает мне другой результат:

SELECT FROM_UNIXTIME(1298063318) = 2011-02-18 22:08:15

Другими словами, он выключен на 18 секунд. Кто-нибудь может объяснить почему?


person Pr0no    schedule 08.04.2012    source источник


Ответы (1)


В MySQL для функций даты используется дополнительная секунда (Документация MySQL). Для функций даты PHP не учитываются дополнительные секунды. По этой причине теперь вы получаете разницу в 24 секунды.

Вы можете попробовать следующее, чтобы решить вашу проблему: http://pumka.net/2010/10/24/why-mysql-timestamp-is-24-seconds-different-from-php/

PS. 38 - 15 = 23

person diewie    schedule 08.04.2012
comment
Если бы возможно, проголосовал бы дважды, только за PS xD Как я просчитался ?! Должно быть, плотный завтрак. - person Pr0no; 08.04.2012