是的日期验证,开始日期之后的结束日期

Posted

技术标签:

【中文标题】是的日期验证,开始日期之后的结束日期【英文标题】:Yup date validation, End date after start date 【发布时间】:2022-01-06 07:28:22 【问题描述】:

这是我的代码,我试图强制两个日期字段始终不同,结束日期必须至少比开始日期晚 1 天。

const EditSchema = Yup.object().shape(

       StartDate: Yup.date()
      .transform(value => (isDate(value) ? undefined : value))
      .typeError('Enter a start date')
      .required('Enter a start date'),

       EndDate: Yup.date()
      .min(Yup.ref('StartDate'), 'End date must be after start date')
      .transform(value => (isDate(value) ? undefined : value))
      .typeError('Enter an end date')
      .required('Enter an end date')
);

【问题讨论】:

我认为您需要禁用之前选择的日期。 如果您分享您的表格,它可能会对人们有所帮助 【参考方案1】:

数小时后试图弄清楚该怎么做。

这是代码。

当您有一个日期选择器并选择一个日期时,它将类似于“01/01/2021 00:00:00”。

因此,如果您需要结束日期至少比开始日期晚 1 天,则必须在开始日期上增加 1 小时,这样您就不能放置 2 个相等的日期。


   StartDate: Yup.date()
      .transform(value => (isDate(value) ? undefined : value))
      .typeError('Enter a date')
      .required('Enter a date')
      ),
      EndDate: Yup.date()
      .min(Yup.ref('StartDate'), 'End date must be after start date')
      .when('StartDate', (st, schema) => 
      
        if(st != null)
          st.setHours(st.getHours() + 1);
          return schema.min(st)

        //this else prevents your page from crashing if there's any other input
        
         else
          return schema.min('1900-01-01')

      )
      .transform(value => (isDate(value) ? undefined : value))
      .typeError('Enter a date')
      .required('Enter a date')
  );

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于是的日期验证,开始日期之后的结束日期的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4:在验证之前和之后验证开始和结束日期

验证结束日期是不是大于开始日期

为 2 Datepicker 开始日期和结束日期设置验证 javascript

js验证开始日期不能大于结束日期?

如何验证结束日期大于开始日期?

开始日期后的 Laravel 验证结束日期不起作用