Несоответствие даты формы symfony2 объекту из базы данных

У меня действительно странная проблема с датами в формах Symfony2.

Это сайт для бронирования отпусков. На стороне клиента все работает нормально, но когда (уже несколько дней - не знаю почему!) пытаюсь отредактировать бронирование на стороне админа, то получаю несовпадение даты в форме. Похоже, что компонент формы symfony неправильно отображает даты. Вот что я вижу в профилировщике:

Формат модели такой же, как у нормализованного формата Нормализованный формат
Object(DateTime) - 2015-04-05T00:00:00+0200 Формат просмотра 04-04-2015

Вы хоть представляете, в чем может быть причина этого? Я правильно настроил php с часовыми поясами для веба и cli, и это несоответствие существует уже пару дней.

Скриншот здесь: http://i.imgur.com/2mSx1ec.png


person Piotr    schedule 08.12.2014    source источник


Ответы (1)


Я думаю, что эти даты связаны с Россией, я прав?

Фактически у вас есть Object(DateTime) - 2015-04-05T00:00:00+0200 в представлении одной библиотеки.

А Object(DateTime) - 2015-04-04T23:00:00+0100 - в другой библиотеке.

Это связано с тем, что Symfony использует Intl для преобразования объектов DateTime во время TimeZone. Но PHP использует внутренний преобразователь.

В этом году в России был сдвиг времени, что привело ко всем проблемам со временем. В московском часовом поясе теперь не UTC+4, а UTC+3. И некоторые библиотеки были обновлены, чтобы решить эту проблему, а другие нет.

Вы можете исправить это вручную, самостоятельно скомпилировав Intl с соответствующим сдвигом во времени, или вы можете использовать какой-нибудь спагетти-код, чтобы исправить это в своих приложениях.

person Michael Sivolobov    schedule 08.12.2014
comment
Спасибо, Майкл. Это может быть причиной, но не в моем случае. Кажется, есть большая разница в преобразовании даты с symfony 2.6. Я понизил свою версию до 2.5 и скоро проверю отличия. Спасибо за помощь в любом случае! - person Piotr; 08.12.2014
comment
Symfony имеет собственную реализацию таблиц данных из Intl начиная с версии 2.6. И там вы можете насчитать 3 разных библиотеки для преобразования TimeZone: Intl, реализация Symfony Intl, таблица часовых поясов PHP. - person Michael Sivolobov; 08.12.2014
comment
Большое спасибо. Это очень полезная информация! Я буду иметь это в виду при обновлении. - person Piotr; 16.12.2014