Обнаружение PHP DST через date () полностью изменено - PullRequest
0 голосов
/ 01 октября 2018

Мы столкнулись с проблемой, которая привела к хаосу в нашей системе, размещенной на AWS EC2.Мы используем PHP-команду даты ('I') (заглавная i), чтобы обнаружить переход на летнее время в действии или нет.В течение лета он продолжал возвращать «1» довольно счастливо.

29.09.2008 около 7:00 он начал возвращать «0», что указывает на изменение зимнего времени.Это произошло почти ровно за один полный месяц до того, как изменения должны были произойти 29 октября.

В результате мы на один час отключены от нашего времени UTC.По какой-то причине PHP, наш EC2 считает, что время переключилось на один месяц раньше.

Часовой пояс Linux: Европа / Дублин (IST, +0100) Часовой пояс PHP установлен через date_default_timezone_set ('Европа / Дублин');

date('I', strtotime('2018-09-29 02:00:00')) // returns "0" - which is wrong as DST is active now!

DST отключается в Ирландии в 2018-10-29

date('I', strtotime('2018-11-29 02:00:00')) // returns "1" - which is wrong as DST is Summer time!

Редактировать: та же проблема подтверждена на нескольких наших экземплярах AWS EC2.Я свяжусь с поддержкой Amazon AWS и обновлю эту ветку с разрешением.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Устранена проблема: https://bugs.php.net/bug.php?id=76983 По-видимому, часовой пояс Дублина имеет исключение, основанное на некотором историческом смещении.Мне еще предстоит полностью понять причину, стоящую за этим, но это технически объясняет проблему.

0 голосов
/ 01 октября 2018

Я хотел бы поделиться своим опытом в отношении исправлений DST для моих существующих продуктов.

    $ssCurrentTimeZone    = date_default_timezone_get();
    $oDateTimeZone       = new DateTimeZone($ssCurrentTimeZone);
    $oDateTime           = new DateTime("now", $oDateTimeZone);

Как показано выше, пример php работает над моим существующим продуктом.Если вы используете new DateTime(), вам не нужно обрабатывать какие-либо вещи, связанные с DST.

Надеюсь, вы сможете сэкономить свое время с помощью этой идеи.

...