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

The*_*der 7 yup formik

我正在使用Formik和yup来验证它。我对两个字段
的验证有以下要求startedended

  1. started必须是有效日期。
  2. started必须是过去的日期。
  3. ended可以为 null,表示不需要。
  4. ended不能为空,并且如果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")
})}
Run Code Online (Sandbox Code Playgroud)

1、2、3 有效,但第四次验证无效。
我也尝试将其更改为is: started => started !==null,这是完全错误的,因为我console.log(started)和那打印了我Invalid date。
我什至尝试过is: true也没有成功。

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

LOP*_*HER 13

从这里得到这个解决方案/sf/answers/4219425731/。

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

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