You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Formik配合Yup做日期校验如何设置expirationDate最小值为enteredDate加1天

问题根源

yup.ref()返回的是Yup内部的字段引用标记,不是运行时的实际字段值,你直接将其传入dayjs做计算时,无法解析为合法日期对象,就会触发类型转换错误。

解决方案

使用Yup内置的when()方法监听enteredDate字段,运行时动态获取真实的日期值计算最小限制,示例代码如下:

import dayjs from 'dayjs';

// 字段校验规则
yup.date('Expiration Date')
  .nullable()
  .when('enteredDate', (enteredDate, schema) => {
    // enteredDate为空时不做额外限制
    if (!enteredDate) return schema;
    // 计算enteredDate的后一天,统一置零时分秒避免时间差误判
    const minExpireDate = dayjs(enteredDate).add(1, 'day').startOf('day').toDate();
    return schema.min(minExpireDate, 'Expiration Date needs to be after Entered Date');
  })

如果你不想引入dayjs依赖,可以用原生Date实现日期计算:

.when('enteredDate', (enteredDate, schema) => {
  if (!enteredDate) return schema;
  const minExpireDate = new Date(enteredDate);
  minExpireDate.setDate(minExpireDate.getDate() + 1);
  // 清除时分秒毫秒,避免同一天不同时间的校验误差
  minExpireDate.setHours(0, 0, 0, 0);
  return schema.min(minExpireDate, 'Expiration Date needs to be after Entered Date');
})

内容的提问来源于stack exchange,提问作者user101289

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 17:06:02