2010-09-21 84 views
10

Im utilizando el complemento validar jQuery y me preguntaba si había una forma de validar si la fecha ingresada en un campo era una fecha como aaaa-mm-dd Y la fecha cae entre el 29 de noviembre de 2010 - 15 de diciembre de 2010jQuery Validate (Rango de fechas)

Soy bastante nuevo en jQuery, así que si hay una respuesta por favor entorpece la respuesta tanto como sea posible para que pueda superarla. Muchas gracias por cualquier/todas las sugerencias

Respuesta

7

nunca he utilizado el plugin de validación, pero una mirada a través de la API sugiere que algo como esto podría funcionar:

$.validator.addMethod('daterange', function(value, element) { 
    if (this.optional(element)) { 
     return true; 
    } 

    var startDate = Date.parse('2010-11-29'), 
     endDate = Date.parse('2010-12-15'), 
     enteredDate = Date.parse(value); 

    if (isNan(enteredDate)) { 
     return false; 
    } 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}); 

Se podría entonces, creo, necesidad para agregar la clase daterange el elemento apropiado.

5

La respuesta de lonesomeday es bastante cercana, con algunos ajustes. Me gustaría terminar el código de la siguiente manera:

if(isNaN(enteredDate)) return false; 

    return ((startDate <= enteredDate) && (enteredDate <= endDate)); 
}, "Please specify a date between 2010-11-29 and 2010-12-15"); 

Esto fija la función isNaN, y también proporciona un mensaje de error a sus usuarios para que sepan lo que estás buscando.

+0

Emily por favor, corrija la fecha en el mensaje de validación, es decir, 2010-12-15

9

Si desea una función reutilizable, es posible extender Emily y respuestas de lonesomeday para permitir un argumento que debe facilitarse:

$.validator.addMethod('daterange', function(value, element, arg) { 
    // Same as above 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value);  
    // Same as below 

}, $.validator.format("Please specify a date between {0} and {1}.")) 

Véase el source del método de validación de jQuery range para un ejemplo.

1

He hecho un par de pequeñas correcciones en el código de Connor.

El código de trabajo resultante es:

$.validator.addMethod('daterange', function(value, element, arg) { 
    if (this.optional(element) && !value) { 
     return true; 
    } 

    var startDate = Date.parse(arg[0]), 
     endDate = Date.parse(arg[1]), 
     enteredDate = Date.parse(value); 

    if (isNaN(enteredDate)) { 
     return false; 
    } 

    return ((isNaN(startDate) || (startDate <= enteredDate)) && 
      (isNaN(endDate) || (enteredDate <= endDate))); 


    }, $.validator.format("Please specify a date between {0} and {1}.")); 

luego usarlo como esto:

$("#some_date_input").rules("add",{daterange:['01/31/2001','01/31/2020']}); 
1

Mantenga sus caballos, chicos! :)

No olvide que Date.parse no puede funcionar correctamente con diferentes configuraciones regionales, solo analiza correctamente el formato de fecha específico.

Si usa varios formatos de fecha (específicos de la cultura), es mejor seguir con el manejo de la fecha de jquery datepicker.

Supongamos que ha cargado el objeto jquery datepicker específico de la cultura (por ejemplo, jquery.ui.datepicker-nb-NO.js, donde el formato de fecha es DD.MM.aaaa y no está analizado por Fecha). analizar) e inicializado que, el enfoque correcto es:

$.validator.addMethod('dateRange', function (value, element, parameterValue) { 
     if (this.optional(element) && !value) { 
      return true; 
     } 
     var dateFormat = $(element).datepicker('option', 'dateFormat'); 
     try { 
      var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime(); 
      var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime(); 
      var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime(); 
      return (startDate <= enteredDate) && (enteredDate <= endDate); 
     } catch (error) { 
      return true; 
     } 
    }); 

he puesto parseDate cosas dentro del bloque try, porque no hay forma normal de averiguar si la fecha se ha analizado correctamente.