Я преобразовываю даты и время в метки времени с помощью PHP, прежде чем они будут вставлены в мою базу данных MySQL.
Моя проблема состоит в том, что, когда я использую функцию strtotime PHP, выходная метка времени является-1 часом позади моего фактического времени.
Например, рассмотрение сегодняшней даты: 21.07.2010. Когда я использую код php как:
<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>
Переданной обратно меткой времени является GMT equivilent МИНУС 1 час. т.е. я возвращаюсь: 20 июля 2010 23:00:00 GMT вместо 21 июля 2010 0: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.