Тема рассматривалась давно, но вдруг кому пригодится, сам столкнулся с такой задачей. Как вариант
Создаем поведение DateToTimeBehavior
<?php
namespace common\behaviors;
use yii\behaviors\AttributeBehavior;
use yii\base\InvalidConfigException;
class DateToTimeBehavior extends AttributeBehavior {
public $timeAttribute;
public function getValue($event) {
if (empty($this->timeAttribute)) {
throw new InvalidConfigException('Can`t find "fromAttribute" property in ' . $this->owner->className());
}
if (!empty($this->owner->{$this->attributes[$event->name]})) {
$this->owner->{$this->timeAttribute} = strtotime($this->owner->{$this->attributes[$event->name]});
return date('d.m.Y', $this->owner->{$this->timeAttribute});
} else {
if (!empty($this->owner->{$this->timeAttribute})) {
$this->owner->{$this->attributes[$event->name]} = date('d.m.Y', $this->owner->{$this->timeAttribute});
return $this->owner->{$this->attributes[$event->name]};
}
}
return date('d.m.Y', time());
}
}
В модели создаем свойство для хранения даты в формате 'd.m.Y' , или другом удобном для вас формате (про валидацию главное не забыть) . Данное поведение будет записывать значение в поле time если мы что то получили от формы. Иначе будет инициализироваться переменная date в модели по значению в time.
... ... ...
use common\behaviors\DateToTimeBehavior;
... ... ...
public $date;
... ... ...
И подключаем созданное поведение к нашей модели
... ... ...
public function behaviors() {
return [
[
'class' => DateToTimeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'date',
ActiveRecord::EVENT_AFTER_FIND => 'date',
],
'timeAttribute' => 'time', //Атрибут модели в котором хранится время в int
],
];
}
... ... ...
во view в activeField выводим
use kartik\date\DatePicker;
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'date')->widget(
DatePicker::className()
)?>
<?php ActiveForm::end(); ?>