Функция PHP strtotime() неверна на 1 час?

Я конвертирую даты и время в временные метки, используя 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 GMT вместо 21 июля 2010 года 00:00:00 GMT.

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

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

Ответ 1

Европа/Лондонское время не является GMT в летнее время. Вы должны установить его в формате UTC.

date_default_timezone_set('UTC');

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

Ответ 2

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

Также возможно разумно обеспечить, чтобы ваше системное время было UTC.

Ответ 3

До PHP 5.3 у strtotime возникли проблемы с расчетом времени, если вы добавили или вычитали месяцы и дни и т.д. Это было исправлено, поэтому теперь вы можете точно указать, как вы хотите, чтобы он был рассчитан, если вы ниже PHP 5.3. Я бы рекомендовал сделать вычисление даты в mysql или обновление вашей версии PHP.