PHP strtotime () неправильно работает на 1 час? - PullRequest
14 голосов
/ 22 июля 2010

Я конвертирую даты и время в метки времени, используя PHP, прежде чем они будут вставлены в мою базу данных MySQL.

Моя проблема в том, что когда я использую функцию PHP strtotime, временная метка вывода на 1 час отстает от моего реального времени.

Например, с учетом сегодняшней даты: 21.07.2010.Когда я использую php-код, например:

<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>

Отправленная назад временная метка соответствует МИНУСУ, эквивалентному GMT, 1 час.то есть я вернусь: 20 июля 2010 г. 23:00:00 по Гринвичу вместо 21 июля 2010 г. 00:00:00 по Гринвичу.

Я живу в Великобритании, поэтому мой часовой пояс - GMT.Я объявил свой часовой пояс в сценарии, используя date_default_timezone_set ('Europe / London'), и также убедился, что для файла php.ini установлено значение 'Europe / London'.

Это как-то связано с дневным светомэкономия времени возможно?Как я могу решить проблему, не добавляя 1 час ко всем моим датам?

Ответы [ 3 ]

26 голосов
/ 22 июля 2010

Время в Европе / Лондоне не является временем по Гринвичу во время перехода на летнее время. Вам нужно установить его на UTC.

date_default_timezone_set('UTC');

date_default_timezone_set('GMT'); может работать, но, как отмечает Кеннет в комментарии ниже, это устарело.

1 голос
/ 22 июля 2010

Лондонский часовой пояс выражается в британском летнем времени летом. При этом рекомендуется хранить время в UTC и представлять время конечному пользователю либо в UTC, либо в ИХ по местному времени.

Вероятно, также стоит убедиться, что ваше системное время указано в формате UTC.

0 голосов
/ 22 июля 2010

До PHP 5.3 у strtotime были проблемы с вычислением времени, если вы добавили или вычли месяцы и дни и т.д. рассчитать дату в MySQL или обновить версию PHP.

...