Страница 1 из 1
Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 11:24
Brainfuck
Использую
Kartik DateTimePicker вот так:
Код: Выделить всё
echo $form->field($model, 'time')->widget(\kartik\datetime\DateTimePicker::class, [
'options' => ['value' => Yii::$app->formatter->asDatetime($model->time)],
'pluginOptions' => [
'autoclose' => true,
'format' => 'dd.mm.yyyy, hh:ii',
'startDate' => 'd',
],
]);
Визуально все выглядит правильно, но проблема в том что дата приходит на сервер строкой, а поле интовое, т.е. нужен timestamp. Как быть?
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 11:31
yiiliveext
Используйте AttributeBehavior для преобразования
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 11:34
Brainfuck
yiiliveext писал(а): ↑2019.10.18, 11:31
Используйте AttributeBehavior для преобразования
Это bad practice. В другом месте я могу задать время по другому и все сломается. 100% уверен что у этого виджета есть какая-нибудь настройка для такого случая
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 11:42
yiiliveext
Brainfuck писал(а): ↑2019.10.18, 11:34
yiiliveext писал(а): ↑2019.10.18, 11:31
Используйте AttributeBehavior для преобразования
Это bad practice. В другом месте я могу задать время по другому и все сломается. 100% уверен что у этого виджета есть какая-нибудь настройка для такого случая
В другом месте вы можете присвоить строку интовому полю и все сломается. Логика шикарная)
Тогда делайте через геттер и сеттер и виртуальный атрибут.
Код: Выделить всё
echo $form->field($model, 'timeString')->widget(\kartik\datetime\DateTimePicker::class, [
'options' => ['value' => Yii::$app->formatter->asDatetime($model->time)],
'pluginOptions' => [
'autoclose' => true,
'format' => 'dd.mm.yyyy, hh:ii',
'startDate' => 'd',
],
]);
//в модели
public function getTimeString()
{
return Yii::$app->formatter->asDatetime($this->time);
}
public function setTimeString($value)
{
return $this->time = Yii::$app->formatter->asTimestamp($value . ' ' . Yii::$app->formatter->timeZone);
}
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 11:59
Brainfuck
yiiliveext писал(а): ↑2019.10.18, 11:42
В другом месте вы можете присвоить строку интовому полю и все сломается. Логика шикарная)
Не строку, а наоборот число
Решил сам. Добавил правило валидации:
Код: Выделить всё
['time', 'time', 'type' => 'datetime', 'timestampAttribute' => 'time'],
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.18, 12:06
yiiliveext
Brainfuck писал(а): ↑2019.10.18, 11:59
yiiliveext писал(а): ↑2019.10.18, 11:42
В другом месте вы можете присвоить строку интовому полю и все сломается. Логика шикарная)
Не строку, а наоборот число
Решил сам. Добавил правило валидации:
Код: Выделить всё
['time', 'time', 'type' => 'datetime', 'timestampAttribute' => 'time'],
Может там все же DateValidator?
Как-то так должно быть
Код: Выделить всё
['time', 'date', 'type' => 'datetime', 'timestampAttribute' => 'time']
Но, как говорил один человек
Код: Выделить всё
Это bad practice. В другом месте я могу задать время по другому и все сломается.
Re: Как сделать выбор даты и времени?
Добавлено: 2019.10.19, 15:27
proctoleha
Brainfuck писал(а): ↑2019.10.18, 11:24
Визуально все выглядит правильно, но проблема в том что дата приходит на сервер строкой, а поле интовое, т.е. нужен timestamp. Как быть?
Почему не хотите использовать strtotime()?