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

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

$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 говорит, что fiji - это GMT +12 здесь. Я даже попытался установить часовой пояс по умолчанию для Европы / Лондона или UTC, но все же смещение fiji неверно. Флаг перехода на летнее время (индекс isdst в массиве $ transitions) активен для fiji, который, я думаю, должен быть ложным в случае fiji, поскольку их летнее время только что закончилось. В некоторых других часовых поясах активен dst, например America / Asuncion, America / Campo_Grande, America / Sao_Paulo, Australia / Adelaide и т. Д., Но все их смещения верны.

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

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


person Abdul Mannan    schedule 20.01.2016    source источник


Ответы (1)


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

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

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

person Matt Johnson-Pint    schedule 20.01.2016