使用vue.js和vee-validate,使用after:和计算字段的日期验证似乎不起作用

时间:2019-06-26 18:15:56

标签: javascript vue.js vee-validate

在下面的代码栏中,我有一个简单的输入,其中包含一个日期:

<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日期(在此处显示)和简单日期,例如“ 1/1/2019”。
  • 各种验证规则。没有date_format,不需要,等等。
  • 我已经花了几个小时了。感觉好像我缺少明显的东西,很快就会踢自己。

我还注意到vee-validate在其消息传递中使用了英国风格的语言环境。例如,我在美国,但日期回溯到2019年7月25日。我不知道日期比较是否会偏斜。

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

1 个答案:

答案 0 :(得分:1)

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