Сегодня я борюсь со странной проблемой. По какой-то причине мой сервер делает вид, что часовой пояс «Европа / Берлин» – это UTC (это должен быть UTC + 1). Если я установил часовой пояс для «Европы / Брюсселя», например, он правильно преобразует время.
Я создал некоторый фиктивный код для тестирования моего сервера и онлайн-компилятора. Пока компилятор работает (я использовал http://sandbox.onlinephpfunctions.com/ ), мой сервер продолжает эту проблему.
Вот код:
<?php $time = 'now'; $timezone1 = 'Europe/London'; $timezone2 = 'Europe/Berlin'; $timezone3 = date_default_timezone_get(); $timezone4 = 'Europe/Brussels'; $dateTime1 = new \DateTime($time, new DateTimeZone($timezone1)); $timeParsed1 = $dateTime1->format('Ymd H:i:sP'); $dateTime2 = new \DateTime($time, new DateTimeZone($timezone2)); $timeParsed2 = $dateTime2->format('Ymd H:i:sP'); $dateTime3 = new \DateTime($time, new DateTimeZone($timezone3)); $timeParsed3 = $dateTime3->format('Ymd H:i:sP'); $dateTime4 = new \DateTime($time, new DateTimeZone($timezone4)); $timeParsed4 = $dateTime4->format('Ymd H:i:sP'); echo($timezone1 . ': ' . $timeParsed1 . '<br>' . $timezone2 . ': ' . $timeParsed2 . '<br>' . $timezone3 . ': ' . $timeParsed3 . '<br>' . $timezone4 . ': ' . $timeParsed4); ?>
И вот результат, который этот genereates:
Europe/London: 2017-01-26 01:24:18+00:00 Europe/Berlin: 2017-01-26 01:24:18+00:00 UTC: 2017-01-26 01:24:18+00:00 Europe/Brussels: 2017-01-26 02:24:18+01:00
Я пытался найти причину этого и искать здесь в Stackoverflow, но я не мог найти причину. Вот ссылка на мой phpinfo (): http://arma.jianji.de/phpinfo.php
И это фиктивный код на моем сервере в действии: http://arma.jianji.de/phptest.php
Сервер был недавно настроен мной, используя Ubtuntu 16 LTS и Plesk Onyx. Часовой пояс сервера по умолчанию установлен в Лондон.
К сожалению, я не смог найти причину этого. У вас есть идея?
Заранее спасибо за вашу помощь!
Обновить
Поскольку это было вызвано довольно много, я создал тест, в котором я установил часовой пояс по умолчанию, используя:
date_default_timezone_set('Europe/Brussels');
Кроме того, я добавил «Европа / Лондон» в качестве часового пояса по умолчанию в моем php.ini.
Проблема все еще сохраняется: http://arma.jianji.de/phptest_default.php
Как любезно отметил @ Руслан Османов, данные по временным зонам для Европы / Берлина были неверными. Я смог проверить это, используя
zdump -V Europe/Berlin | grep 2017
Чтобы исправить это, я выполнил переустановку tzdata, которая устранила проблему.
apt-get --reinstall install tzdata