Hola, estoy usando Yup como validador para uno de mis esquemas.
Este es mi código aquí para validar el esquema.
start: Yup.date() .max(new Date(), "Max date") .min( new Date(new Date().setFullYear(new Date().getFullYear() - 120)), "Min date") ), end: Yup.date().min(Yup.ref('start'), "End date shouldn't be same as start date"),Esto funciona, pero puedo agregar la misma fecha para la fecha de inicio y la fecha de finalización.
Quiero que la fecha de finalización sea diferente y posterior a la fecha de inicio
Muchas gracias
Puedes probar Yup.when para manejar esto,
Le proporciona un activador en el que el cambio de campo debe volver a cumplirse el esquema y el objeto de esquema para manejar las validaciones.
const validationSearch = Yup.object().shape({ start: Yup.date() .max(new Date(), "Max date") .min( new Date(new Date().setFullYear(new Date().getFullYear() - 120)), "Min date" ), end: Yup.date() // .min(Yup.ref("start"), "End date shouldn't be same as start date") .when("start", (val, schema) => { if (val) { const startDate = new Date(val); startDate.setDate(startDate.getDate() + 1); return val && schema.min(startDate, "Should beGreater than start date"); } }) });Encuentre códigos de muestra y caja aquí
Esto se puede lograr usando notOneOf , como se muestra a continuación:
const Yup = require("yup"); const moment = require("moment"); const schema = Yup.object().shape({ start: Yup.date() .max(new Date(), "Max date") .min(new Date(new Date().setFullYear(new Date().getFullYear() - 120)), "Min date"), end: Yup.date() .min(Yup.ref("start"), "End date should be higher than the start date") .notOneOf([Yup.ref("start"), null], "End date should not be the same as the start date") }); const startDate = moment().subtract(1, "minute").toDate(); //This date has to be smaller than the Date declaration in start.max const endDate = startDate; schema.isValid({ start: startDate, end: endDate }).then((valid) => { console.log(valid); //False });Desafortunadamente, moreThan no está disponible para las fechas, por lo que necesitamos crear dos verificadores separados: end >= start (min), end !== start (notOneOf).