Ранее использовал вариант с виджетом от картика и иногда вариант с геттером/сеттером, но как-то было не красиво и не очень удобно. Поиск подсказал ещё вариант с поведением, но это ещё больше кода и меньше прозрачности.
Посмотрев на валидатор default пришла идея сделать валидатор для преобразования даты. В итоге получилось вот что:
Код: Выделить всё
class AsDateValidator extends Validator
{
public $format = 'yyyy-MM-dd';
public function validateAttribute($model, $attribute)
{
switch ($this->format) {
case 'U':
case 'timestamp':
$value = Yii::$app->formatter->asTimestamp($model->$attribute);
break;
default:
$value = Yii::$app->formatter->asDate($model->$attribute, $this->format);
}
$model->$attribute = $value;
}
}
Код: Выделить всё
['birthday', AsDateValidator::className(), 'format' => 'php:Y-m-d'], // 2017-07-26
['date', AsDateValidator::className(), 'format' => 'dd.MM.yyyy HH:mm:ss'], // 15.07.2017 02:15:20
['dayX', AsDateValidator::className(), 'format' => 'U'], // 1501020241
['dayZ', AsDateValidator::className(), 'format' => 'timestamp'], // 1501020241