Валидация даты на клиенте

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Валидация даты на клиенте

Сообщение long399 »

Здравствуйте всем, кто это прочитает. Использую стандартный валидатор 'date' для валидации даты на стороне сервера, но к сожалению этот валидатор не предоставляет валидацию на стороне клиента.

В правилах модели прописываю:

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

[
    'date', 'date', 'format' => 'yyyy-M-d', 'message' => 'Дата указана неверно. Используйте формат "yyyy-mm-dd".',
    'max' => strtotime(date('d.m.y')), 'tooBig' => 'Нельзя указывать дату, которая еще не наступила.',
],
Ввод даты осуществляю, используя виджет DatePicker:

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

<?= 
        $form->field($model, 'date')->widget(DatePicker::className(), [
            'type' => DatePicker::TYPE_COMPONENT_PREPEND,
            'attribute' => 'date',
            'readonly' => 'true',
            'pluginOptions' => [
                'autoclose' => true,
                'format' => 'yyyy-mm-dd',
            ],
            'options' => [
                'placeholder' => 'Выберите дату сдачи работы...',
                'id' => 'date',
            ],
        ])
?>
Пытался найти способ реализовать валидацию на клиенте, но запутался :?

Пожалуйста, подскажите, как проще всего это реализовать?
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: Валидация даты на клиенте

Сообщение Prooksius »

Наверное, речь об этом.
Там в самом низу о bootstrap datepicker:
что бы установить минимальную и максимальную дату есть две опции startDate и endDate в них указываются даты, соотетвственно начальная и конечная. Эти опции надо размещать в 'pluginOptions'
И кстати, strtotime(date('d.m.y')) это ж вроде time()
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Валидация даты на клиенте

Сообщение long399 »

Prooksius писал(а): 2020.05.09, 00:06 Наверное, речь об этом.
Там в самом низу о bootstrap datepicker:
Не совсем про это спрашивал... Но за ссылку спасибо! С помощью опции endDate удалось избавиться от одного из вопросов. Удалось дату ограничить, чтобы ненаступившие дни сделать неактивными:

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

'pluginOptions' => [
                'endDate' => date('+1 day'),
            ],
Prooksius писал(а): 2020.05.09, 00:06 И кстати, strtotime(date('d.m.y')) это ж вроде time()
Да, это так, но с датой почему-то не хочет работать ни в какую валидатор модели. ошибки выдает.

Но все еще актуален вопрос: как провести валидацию формата даты на стороне клиента :?: проверку на то, что он = 'yyyy-mm-dd' :?:
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Валидация даты на клиенте

Сообщение unknownby »

long399 писал(а): 2020.05.11, 09:01 Но все еще актуален вопрос: как провести валидацию формата даты на стороне клиента :?: проверку на то, что он = 'yyyy-mm-dd' :?:
А зачем проверять на стороне клиента, верная дата или нет? Если дается выбор из DataPicker
Если бы он вводил дату руками, то другой вопрос.
Попробуй один из вариантов в format записать

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

'format' => 'yyyy-MM-dd',
'format' => 'yyyy-mm-dd',
'format' => 'php:Y-m-d',
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: Валидация даты на клиенте

Сообщение Prooksius »

unknownby писал(а): 2020.05.11, 14:15 А зачем проверять на стороне клиента, верная дата или нет? Если дается выбор из DataPicker
Если бы он вводил дату руками, то другой вопрос.
Еще один вариант - запретить редактировать дату вручную, только через датапикер. То есть инпут readonly сделать. Ну или в настройках датапикера запретить, если такие настройки есть
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Валидация даты на клиенте

Сообщение long399 »

Всех благодарю за помощь. Выбор ненаступивших дней отсекается опцией endDate, устанавливается требуемый формат даты для виджета и он(виджет)ставится в ридонли.
Ответить