@scooty

Почему IntlDateFormatter в PHP некорректно парсит даты после 26.10.2014?

Имеется следующий код:
$obj = new IntlDateFormatter('ru',IntlDateFormatter::FULL,IntlDateFormatter::FULL,'Europe/Moscow',IntlDateFormatter::GREGORIAN,'dd.MM.yyyy');
var_dump(date('c',$obj->parse('25.10.2014')));
var_dump(date('c',$obj->parse('27.10.2014')));

Он вернет:
string(25) "2014-10-25T00:00:00+04:00" string(25) "2014-10-26T23:00:00+03:00"

Почему дата 27.10.2014 преобразовалась в "2014-10-26T23:00:00+03:00" а не в "2014-10-27T00:00:00+03:00" ?
PHP, tzdata обновлены. Обнаружено на PHP 5.3 и 5.5.
date.timezone установлено в Europe/Moscow.
  • Вопрос задан
  • 2506 просмотров
Решения вопроса 1
ZloeSabo
@ZloeSabo
Добрый день.
Проблема связана с тем, что расширение intl (именно к нему относится IntlDateFormatter) использует базу часовых поясов из ICU.
Попробуйте кинуть в своего админа ссылкой на мой бложек и он сделает вам хорошо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DmitryPRG
@DmitryPRG
PHP программист
Это связано с переводом времени на зимнее время.
Москва перешла на +03:00

и то, что было раньше 00:00:00+04:00 стало 23:00:00+03:00.
Надо смотреть как считались другие переводы времени и анализировать разницу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы