Стандартный DatePicker из jQuery UI очень удобный и популярный виджет для отображения и редактирования даты. У него есть опция dateFormat
с помощью которой можно указать какой формат нужно использовать для парсинга и отображения даты. Но часто возникают ситуации когда в базе дата хранится в одном формате, а показывать пользователю её нужно совсем по другому.
Решить эту задачу можно по разному. Например, можно на сервере при выводе виджета форматировать ее в нужный формат, а при получении формы от пользователя форматировать обратно. Но это не очень удобно да и не хочется замусоривать модель костылями. Тем более что сам DatePicker предлагает помощь в решении этой проблемы.
У него есть две нужные нам опции altFormat
и altField
. Вот как можно их использовать:
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', [
'name' => 'visibleDate',
'value' => date('d.m.Y'),
'language' => 'ru',
'options' => [
'dateFormat' => 'dd.mm.yy',
'altFormat' => 'yy-mm-dd',
'altField' => '#Book_publishDate',
],
]); ?>
<?= $form->hiddenField($book, 'publishDate') ?>
Как видите, всё просто - свойство модели выводим в скрытое поле, в котором дата всегда будет в том формате, в котором она хранится в базе и нам ничего не придется менять в коде модели или контроллера. Когда пользователь будет менять дату в видимом DatePicker, тот будет автоматически обновлять значение в скрытом поле с нужным нам форматом.