Как показать обновленное время для стран DST?

Я показываю время для разных часовых поясов, и проблема в том, что мой сервер работает под управлением PHP v5.3.25, тогда как на локальном компьютере у меня v5.5.9

Когда я устанавливаю определенный часовой пояс и показываю его время, мой локальный компьютер показывает это нормально, но сервер не добавляет часы во время летнего времени.

date_default_timezone_set('Europe/London');
echo date('Y-m-d H:i:s');

Я создал обходной путь для этого:

date_default_timezone_set('Europe/London');
$is_dst = date('I');
if($is_dst) {
$date = date('Y-m-d H:i:s', strtotime('+1 hours', strtotime(date('Y-m-d H:i:s'))));
} else {
$date = date('Y-m-d H:i:s');
}
echo $date;

Этот обходной путь подходит для Великобритании, но я хочу, чтобы динамическое и правильное решение отображало время. Более того, когда я отправляю электронную почту с использованием PHPMailer, из-за этой проблемы перехода на летнее время на принимающей стороне отображается неверная метка времени.

0

Решение

Это не надежный способ справиться с ТЛЧ, поскольку в некоторых местах не используются полные часы, или они вообще не используются. Расширение DateTime обрабатывает все это для вас, и это было там с PHP 5.2, так что вы должны быть в состоянии сделать это:

date_default_timezone_set('Etc/UTC');
$date = new DateTime(null, new DateTimeZone('Europe/Amsterdam'));

Как правило, вы всегда должны использовать UTC для внутренних временных меток, в противном случае очень легко запутаться. Конвертируйте в часовой пояс пользователя всякий раз, когда вам нужно что-то отобразить для него — хотя, конечно, это означает, что вам нужно знать часовой пояс пользователя, и, как правило, вам нужно получить его из JS, поскольку он не включен в $_SERVER, хотя вы можете вывести его из данных геоипа или попросить пользователя явно указать зону в настройках вашего приложения.

1

Другие решения

Оказалось, что время сервера не было синхронизировано с временем UTC. Я открыл билет у своего хостинг-провайдера, и они запустили для меня услугу NTP. Таким образом, проблема была не с PHP, а с остановкой службы NTP. Теперь время на моем сервере синхронизировано, а также выполняется переход на летнее время.

0

По вопросам рекламы [email protected]