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

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

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

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

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

Временная метка, отправленная назад, является GMT equivilent MINUS 1 час. т.е. я возвращаюсь: 20 июля 2010 23:00:00 GMT вместо 21 июля 2010 00:00:00 GMT.

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

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

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

date_default_timezone_set('UTC');

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

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

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

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