0

我正在为 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>  
4

1 回答 1

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'
    ),
于 2020-07-21T20:23:43.010 回答