是的:如何验证两个相互依赖的日期?

时间:2019-09-18 05:12:11

标签: formik yup

我正在使用Formikyup进行验证。
对于验证两个字段startedended

,我有以下要求
  1. started必须是有效日期。
  2. started必须是过去的日期。
  3. ended可以为null,表示不需要。
  4. ended不能为null,并且如果started必须为有效日期 具有有效的日期值。

这是我的验证模式:

validationSchema={yup.object().shape({
    started: yup.date().max(new Date(), "Future date not allowed").typeError("Invalid Started date"),
    ended: yup.date().default(null).when("started", {
        is: yup.date().isValid(),
        then: yup.date().min(yup.ref("started"), "Ended date must be later than Start date"),
        otherwise: yup.date().nullable()
    }).typeError("Invalid Ended date")
})}

1,2,3有效,但是第四个验证无效。
我还尝试将其更改为is: started => started !==null,这是完全错误的,因为我console.log(started)并打印了Invalid date
我什至尝试了is: true也不起作用。

验证此要求的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

从这里https://stackoverflow.com/a/60277510得到了这个解决方案。

但是基本上,这将检查开始存在,然后检查结束时间是否晚:

 ended: yup.date().default(null)
                .when("started",
                    (started, yup) => started && yup.min(started, "End time cannot be before start time"))