Минутная дата Yup/Formik не включает текущую дату

У меня есть эта схема в Yup, которая устанавливает минимальное ограничение даты в поле даты:

Yup.date()
   .required(strings.RequiredField(strings.Invoice_Label_DueDate))
   .min(new Date(), "Date cannot be in the past")

Но если я выберу текущую дату, она все равно вычислит ее в прошлом. Обратите внимание, что это не происходит, когда я max(new Date(), ...), В этом случае он включает в себя все прошлые даты вплоть до текущей даты.

Изменить: Вот пример проблемы https://codesandbox.io/s/jznz5vl7lw

3 ответа

Вы также можете использовать:

const today = new Date();
today.setHours(0, 0, 0, 0)

тогда

.min(today, 'Date cannot be in the past')

Если вы хотите установить минимум как вчерашнюю дату, вы можете объявить переменную и установить ее, например, на вчерашнюю дату (есть много других способов):

const yesterday = new Date(Date.now() -86400000);

тогда:

.min(yesterday, "Date cannot be in the past")

Я использую это для подтверждения истечения срока действия карты. Им можно манипулировать и для обычной даты.

      cardExpiry: Yup.string()
      .required("Card Expiry is required")
      .matches(/^(0[1-9]|1[0-2])\/\d{4}$/, "Invalid Card Expiry (MM/YYYY)")
      .test("cardExpiry", "Date cannot be in the past", function (value) {
        const today = new Date();
        const [expiryMonth, expiryYear] = value.split("/");
        const cardExpiryDate = new Date(
          parseInt(expiryYear),
          parseInt(expiryMonth) - 1
        );
        return cardExpiryDate >= today;
      })

Надеюсь, это кому-то поможет.

Другие вопросы по тегам