Страница 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()?