У меня есть объект Symfony, сохраняющий день рождения следующим образом:
/**
* @var \DateTime
* @Gedmo\Versioned
* @ORM\Column(name="birthday", type="date", nullable=true)
*/
protected $birthday;
Соответственно в MySQL день рождения хранится как дата. Теперь, чтобы отредактировать сущность, я использую форму с полем Symfony DateType для дня рождения:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
...
->add('birthday', DateType::class, [
'required' => false,
'widget' => 'single_text',
'format' => 'dd.MM.yyyy',
'attr'=> [
'style'=>'',
],
])
...
;
}
Интересно, что когда день рождения, хранящийся в базе данных, является датой до пятницы, 13 декабря 1901 года, в форме отображается неправильная дата (фактически дата за день до этого). Чтобы узнать, что происходит, я изменил атрибут формата в построителе форм на:
'format' => 'dd.MM.yyyy HH:mm:ss z',
и, например, если дата «26.02.1825», в поле формы отображается «25.02.1825 23:53:28 GMT+0:53:28», что выглядит так, как будто используется очень странный часовой пояс. Итак, я думаю, должна быть проблема, когда запись даты MySQL преобразуется в объект DateTime в PHP с помощью Doctrine?
В качестве обходного пути я добавил 60 минут к преобразованному значению (в получателе свойства), но должен быть правильный способ справиться с этим. Может ли кто-нибудь помочь мне здесь?
Я уверен, что это было проблемой раньше, но я действительно не мог найти похожих вопросов...
Версии:
- PHP 7.0.27
- Симфония 2.8
- Доктрина 1.6