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