【问题标题】:Yup date min doesn't work with Formik DatePicker是的,日期最小值不适用于 Formik DatePicker
【发布时间】:2020-10-15 19:01:58
【问题描述】:

我正在为 Formik 使用 yup validationSchema,但是,当我尝试验证日期时,它不起作用,所有其他字段的验证都正常工作。我做错了什么?

 const formSchema = yup.object({
     startsAt: yup.date().label('startsAt').required("Required").min(new Date(Date.now() -86400000), "Date cannot be in the past"),
     endsAt: yup.date().label('endsAt').required("Required").min(yup.ref('startsAt'),"End date can't be less than start date")
  })

这是我的DatePickers

import { DatePicker } from 'formik-material-ui-pickers'
import { Formik, Field, Form} from 'formik'

  <Formik 
    validationSchema={formSchema}
   >
    <Form>
    <Field
          component={DatePicker}
          format="MM/DD/YYYY"
          inputVariant="outlined"
          name="startsAt"
          label="Start Date"
          className={classes.dtPicker}
        />
        <Field
          component={DatePicker}
          format="MM/DD/YYYY"
          inputVariant="outlined"
          name="endsAt"
          label="End Date"
          className={classes.dtPicker}
        />
      </Form>
    </Formik>  

【问题讨论】:

    标签: reactjs formik yup formik-material-ui


    【解决方案1】:

    代替:

    startsAt: yup.date().label('startsAt').required("Required").min(new 
    Date(Date.now() -86400000), "Date cannot be in the past"),
         
    

    尝试:

    import {parse, isDate} from 'date-fns';
    const parseDateString = (value, originalValue) =>
      isDate(originalValue) ? originalValue : parse(originalValue);
    
    
    startsAt: yup.date().label('startsAt').required("Required")
    .transform(parseDateString)
    .min(
          new Date().setHours(0, 0, 0, 0),
          'Date cannot be in the past'
        ),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2016-07-16
      相关资源
      最近更新 更多