Как сделать выбор даты и времени?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 260
Зарегистрирован: 2018.02.19, 14:20

Как сделать выбор даты и времени?

Сообщение Brainfuck » 2019.10.18, 11:24

Использую 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. Как быть?

yiiliveext
Сообщения: 768
Зарегистрирован: 2019.08.13, 01:49

Re: Как сделать выбор даты и времени?

Сообщение yiiliveext » 2019.10.18, 11:31

Используйте AttributeBehavior для преобразования

Brainfuck
Сообщения: 260
Зарегистрирован: 2018.02.19, 14:20

Re: Как сделать выбор даты и времени?

Сообщение Brainfuck » 2019.10.18, 11:34

yiiliveext писал(а):
2019.10.18, 11:31
Используйте AttributeBehavior для преобразования
Это bad practice. В другом месте я могу задать время по другому и все сломается. 100% уверен что у этого виджета есть какая-нибудь настройка для такого случая

yiiliveext
Сообщения: 768
Зарегистрирован: 2019.08.13, 01:49

Re: Как сделать выбор даты и времени?

Сообщение yiiliveext » 2019.10.18, 11:42

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);
}


Brainfuck
Сообщения: 260
Зарегистрирован: 2018.02.19, 14:20

Re: Как сделать выбор даты и времени?

Сообщение Brainfuck » 2019.10.18, 11:59

yiiliveext писал(а):
2019.10.18, 11:42
В другом месте вы можете присвоить строку интовому полю и все сломается. Логика шикарная)
Не строку, а наоборот число

Решил сам. Добавил правило валидации:

Код: Выделить всё

['time', 'time', 'type' => 'datetime', 'timestampAttribute' => 'time'],

yiiliveext
Сообщения: 768
Зарегистрирован: 2019.08.13, 01:49

Re: Как сделать выбор даты и времени?

Сообщение yiiliveext » 2019.10.18, 12:06

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. В другом месте я могу задать время по другому и все сломается. 

Аватара пользователя
proctoleha
Сообщения: 277
Зарегистрирован: 2016.07.10, 19:00

Re: Как сделать выбор даты и времени?

Сообщение proctoleha » 2019.10.19, 15:27

Brainfuck писал(а):
2019.10.18, 11:24
Визуально все выглядит правильно, но проблема в том что дата приходит на сервер строкой, а поле интовое, т.е. нужен timestamp. Как быть?
Почему не хотите использовать strtotime()?
Вот за что я не люблю линукс, так это за свои кривые, временами, руки

Ответить