Использование vue.js и vee-validate, проверка даты с использованием after: и вычисляемое поле не работают - PullRequest
1 голос
/ 26 июня 2019

В коде ниже, у меня есть простой ввод, который содержит дату:

<input type="text" 
       v-model="startDate"  
       name="StartDate"
       v-validate="{ required: false, date_format: 'dd/MM/yyyy', before: maxStartDate }"/> 

Независимо от того, какую действительную дату я ввожу, генерируется ошибка:

StartDate должно бытьдо 2019-08-01T03: 59: 59.999Z.

Я также пытался:

  • Заставить maxStartDate возвращать объекты дат JavaScript, даты ISO (видимые здесь) и простые датыкак «01.01.2009».
  • Различные комбинации правил проверки.Нет даты_формат, не требуется и т. Д.
  • Я был на этом часах.Такое ощущение, что я упускаю что-то очевидное и скоро пну себя.

Я также заметил, что vee-validate использует локализацию в британском стиле в своих сообщениях.Например, я в США, но даты возвращаются, как 25/07/2019.Интересно, как-нибудь искажается сравнение дат.

Codepen: https://codepen.io/Kinetiq/pen/XLeEaM

1 Ответ

1 голос
/ 27 июня 2019

Валидатор before не работает так, как вы думаете.Требуется ссылка на другое поле, содержащее дату - представьте, что если вы делаете поля startDate и endDate, вам нужно убедиться, что startDate находится перед endDate.Вот что это делает.

Валидатор, который вы должны использовать: date_between, вот так:

<input type="text" 
       v-model="startDate"
       name="StartDate"
       v-validate="{ date_format: 'dd/MM/yyyy', date_between:['01/01/1990',maxStartDate] }"/>  

И мне пришлось изменить, как maxStartDate определяется следующим образом:

            maxStartDate: function() {
                return moment()
                    .startOf('month')
                    .add(1, 'months')
                    .endOf('month').format('DD/MM/YYYY');
            }

Рабочий пример: https://codepen.io/anon/pen/NZaLzg

...