datetime — проблема перехода на летнее время с Тихоокеанским / Фиджи

Я пытаюсь получить смещение часового пояса, как это

$zone = new DateTimeZone('Europe/Oslo');
$c = new DateTime(null, $zone);
$offset = $c->getOffset();
$transitions = $zone->getTransitions(time(), time());
echo '<pre>',print_r($transitions),'</pre>';

который возвращает смещение в секундах, что хорошо. Но это смещение не работает правильно для часового пояса «Тихий океан / Фиджи». Для Фиджи он возвращает 46800 (т.е. GMT + 13), что неправильно, и это должно было быть 43200. Google говорит, что Фиджи — GMT +12 Вот. Я даже пытался установить часовой пояс по умолчанию для Европы / Лондона или UTC, но смещение Фиджи не верно. Флаг перехода на летнее время (индекс isdst в массиве $ transitions) активен для фиджи, что, на мой взгляд, должно быть ложным в случае фиджи, поскольку их летнее время только что закончилось. Несколько других часовых поясов также активны, например, Америка / Асунсьон, Америка / Кампо-Гранде, Америка / Сан-Паулу, Австралия / Аделаида и т. Д., Но все их смещения верны.

Любая причина, почему смещение Фиджи все еще показывает GMT + 13, а не GMT ​​+ 12? Я искал форумы целый день и ни единой подсказки.

Постскриптум Фиджи: Когда местное летнее время приближалось к воскресенью, 18 января 2015 года, часы с 03:00:00 были переведены назад на 1 час в воскресенье, 18 января 2015 года, вместо 02:00:00 по местному стандартному времени.

3

Решение

Переход Фиджи к концу летнего времени (их переход «откат») был недавно изменен в базовых данных. Ранее он должен был завершиться 24 января, но был перенесен на неделю раньше, на 17 января, в соответствии с заявлениями правительства Фиджи.

Это изменение вступило в силу в версии 2015g базы данных IANA tz (заметки о выпуске здесь). Для PHP вы найдете это в версии 2015.7 пакет timezonedb pecl. Это было выпущено 2015-10-03, и PHP всегда захватывает последний timezonedb перед каждым выпуском PHP. Так что, если вы обновите PHP до версии 5.6.14 или выше (или 7.0.0 RC5 на треке предварительного просмотра dev), то вы автоматически внесете изменения. В противном случае вы можете обновить timezonedb вручную.

В общем, если ваше приложение зависит от точности местного времени (особенно планирование сценарии), то вам следует подписаться на рассылку объявлений в IANA поэтому вы знаете об изменениях, которые могут повлиять на вашу систему, а затем наблюдайте за изменениями нижнего уровня, поступающими в библиотеки, платформы и операционные системы, чтобы убедиться, что они применяются своевременно. В противном случае вы рискуете несоответствия, как описано вами.

1

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

Других решений пока нет …

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