Работаем с DatePicker

В YiiBooster есть удобный виджет поля выбора даты TbDatePicker. Помимо использования его как отдельного виджета, мы можем подключить его в нашей форме. Рассмотрим использование поля выбора даты для записи "День рождения".







Вставить этот элемент в форму можно следующей строкой:

echo $form->datepickerRow($model, 'birthday', array('prepend'=>'<i class="icon-calendar"></i>', 'options'=>array('format'=>'dd/mm/yyyy', 'weekStart'=>1)));

где 'birthday' - поле День рождения в модели $model;

По умолчанию дата отображается на буржуйский манер ММ/ДД/ГГГГ и начало недели с воскресения. Для того, чтобы поправить это дело на более привычный нам лад, необходимо передать параметр в виде массива options, в котором указать требуемые настройки для календаря. В примере выше это format - т.е. приведение выбранной даты к виду ДД/ММ/ГГГГ и старт недели с понедельника, порядковый номер которого в виджете 1 (по умолчанию был 0 - воскресение).

Для сохранения полученной даты в базе данных в виде метки Unix необходимо сделать следующее преобразование:

//достаем переменную из отправленных данных формы
$birthday = $_POST['Profiles']['birthday'];
//формируем массив из строк даты, месяца, года, разделяя общую дату по символу"/"
$birthdayArray = explode('/',$birthday);
//переводим в Unix метку
$birthday = mktime(0,0,0,(int) $birthdayArray[1],(int) $birthdayArray[0],(int) $birthdayArray[2]);

Обратное преобразование.
При необходимости отобразить в DatePicker дату, уже сохраненную в БД сделаем обратное преобразование:

$model = ... //Получаем необходимую Вам строку из БД
//Преобразуем дату создания
$date_time_array = getdate($model->birthday);
$year = $date_time_array['year'];
if ($date_time_array['mday']<10) $mday = "0".$date_time_array['mday'];
else $mday = $date_time_array['mday'];
if ($date_time_array['mon']<10) $mon = "0".$date_time_array['mon'];
else $mon = $date_time_array['mon'];
$model->birthday = $mday.'/'.$mon.'/'.$year;
//далее передаем модель в отображение - render()

т.е. полученную из БД метку времени Unix мы приводим к первоначальному виду ДД/ММ/ГГГГ, дополняя нулем спереди строковые величины дня и месяца длиной в один символ .


ОБСУЖДЕНИЕ: