es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de fecha: La fecha final debe ser posterior a la fecha de inicio.

Aquí está mi código, estoy tratando de forzar que los dos campos de fecha siempre sean diferentes, la fecha de finalización debe ser al menos 1 día después de la fecha de inicio.

const EditSchema = Yup.object().shape({

   StartDate: Yup.date()
  .transform(value => (isDate(value) ? undefined : value))
  .typeError('Ingrese una fecha de inicio')
  .required('Ingrese una fecha de inicio'),

   EndDate: Yup.date()
  .min(Yup.ref('StartDate'), 'La fecha de finalización debe ser después de la fecha de inicio')
  .transform(value => (isDate(value) ? undefined : value))
  .typeError('Ingrese una fecha de finalización')
  .required('Ingrese una fecha de finalización')
});
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que los dos campos de fecha siempre sean diferentes y de que la fecha de fin sea al menos un día después de la fecha de inicio, puede modificar la validación de “EndDate” con el método “.when()” de Yup.

    Aquí está el código actualizado:

    const EditSchema = Yup.object().shape({
    
       StartDate: Yup.date()
          .transform(value => (isDate(value) ? undefined : value))
          .typeError('Ingrese una fecha de inicio')
          .required('Ingrese una fecha de inicio'),
    
       EndDate: Yup.date()
          .transform(value => (isDate(value) ? undefined : value))
          .typeError('Ingrese una fecha de fin')
          .required('Ingrese una fecha de fin')
          .when('StartDate', (startDate, schema) => {
             if (startDate) {
                return schema.min(moment(startDate).add(1, 'day'), 'La fecha de fin debe ser al menos 1 día después de la fecha de inicio')
                            .test('not-equal', 'La fecha de fin debe ser diferente de la fecha de inicio', value => value !== startDate);
             }
             return schema;
          })
    });
    

    En este código, utilizamos el método “.when()” para agregar validaciones adicionales para el campo “EndDate” basado en el valor de “StartDate”. Si “StartDate” está presente, agregamos dos reglas de validación para asegurarnos de que “EndDate” sea al menos un día después de “StartDate” y de que las dos fechas sean diferentes. Usamos la biblioteca “moment.js” para agregar un día a “StartDate” para fines de comparación.

    Note que también eliminamos la validación “.min()” de “EndDate” e incluimos en el método “.when()” en su lugar. Esto se hace para que la regla “.min()” solo se aplique si “StartDate” está presente, de lo contrario podría causar errores.

Comments are closed.