Хитрый DateFormat в jQuery UI DatePicker

Стандартный 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, тот будет автоматически обновлять значение в скрытом поле с нужным нам форматом.