jQuery/JavaScript: ¿Es una fecha? (Validar si es una fecha) [duplicate]

4 minutos de lectura

Avatar de usuario de Omar
Omar

Tengo selector de fecha, pero no pude encontrar una forma de validar si la entrada del usuario es una fecha o no Y si sigue el formato requerido (formato: aaaa-mm-dd)

Este es mi selector de fechas:

$("input[name="date"]").datepicker({ dateFormat: 'yy-mm-dd', changeMonth: true, changeYear: true, numberOfMonths: 3, showButtonPanel: true});

Miré esta solución, “¿Cómo validar el selector de fecha para prohibir/rechazar ciertas fechas?”. Parece bastante simple, pero solo verifica si es un fin de semana. No verifica si el usuario ingresó una fecha, un número aleatorio o un error tipográfico (1231….30-30-2011…30/30/2011…212-565-565…etc.) .

Por favor, juega con mi violín: http://jsfiddle.net/MDa4A/

Información adicional (10-11-2011):

(Pruebe estos jsFiddles y escriba 0-0-0 o 0/0/0)

Usé sus respuestas para llegar a una solución. Funciona cuando uso el formato. “aa-mm-dd”: http://jsfiddle.net/LyEvQ/

PERO es totalmente inútil cuando uso un formato diferente (Ej.: “dd/mm/aa”): http://jsfiddle.net/LyEvQ/1/

Necesito ambos para trabajar. ¿Puedes ayudarme?

  • stackoverflow.com/questions/3880615/isdate-in-jquery

    – Fénix

    8 de noviembre de 2011 a las 16:49

  • Actualice mi violín con su respuesta: http://jsfiddle.net/MDa4A/

    – Omar

    8 de noviembre de 2011 a las 16:52

if (Date.parse("some string")) {
   //Valid date
} else {
  //Not a valid date
}

  • ¿puedes por favor elaborar un poco más?

    – Omar

    8 de noviembre de 2011 a las 16:56

  • w3schools.com/jsref/jsref_parse.asp

    – Asmor

    8 de noviembre de 2011 a las 19:29

  • Esto no es correcto, ya que devuelve el número en lugar de NaN para, por ejemplo, 2014-11-31 que no existe.

    – wieczorek1990

    27/10/2014 a las 16:21

Avatar de usuario de James Johnson
james johnson

Algo como esto debería funcionar:

jQuery.validator.addMethod("customDateValidator",
    function(value, element) {
        try { jQuery.datepicker.parseDate("mm/dd/yyyy", value); return true; }
        catch(e) { 
            return false;
        }
    },
    "Please enter a valid date"
);

$("input[name="date"]").rules("add", { customDateValidator:true });

  • ¿Puedes darme un ejemplo de jsFiddle? -Probé tu respuesta y no pude hacerlo funcionar por mi cuenta =(

    – Omar

    8 de noviembre de 2011 a las 22:57


  • Si está usando datepicker de todos modos (probablemente lo esté), esto parece un mejor validador que simplemente usar Date.parse

    – Rey del Vacío

    19/08/2013 a las 20:45

  • Si algunos obtienen el error “Número faltante en la posición 10” o el análisis no funciona, intente "mm/dd/yy" en lugar de “mm/dd/aaaa”

    – Rikin Patel

    30 de junio de 2014 a las 16:34

  • Nunca he visto el validador jQuery puesto en uso. Muy genial. Voto por ti. Gracias

    – BrianLegg

    25 de enero de 2017 a las 17:17

  • Creo que no es una buena idea validar las fechas manejando las excepciones. @James Hill ha proporcionado una mejor solución para eso.

    – Jamshaid K.

    24 de febrero de 2018 a las 12:25

Utilizar el Date.parse() método para verificar si una fecha es válida:

var timestamp = Date.parse($("input[name="date"]").val()) 

if (isNaN(timestamp) == false) { 
    var d = new Date(timestamp); 
} 

  • Date.parse tiene implementaciones inconsistentes en los navegadores, y no lo usaría como validador. Por ejemplo, los números enteros +-20 000 son fechas válidas (Date.parse("200000")), pero no me gustaría aceptar eso como entrada.

    – nrabinowitz

    8 de noviembre de 2011 a las 21:58

  • y tampoco valida si la fecha es válida, solo comprueba que el día está entre el 1 y el 31, el mes entre el 1 y el 12, etc. Date.parse('2000-11-31') == Date.parse('2000-12-01')

    – kpull1

    14 de marzo de 2013 a las 12:29


  • Yo usaría: if(isNaN(Date.parse($(“input[name=’date’]”).val()){isNotDate}, escribir menos código debería ser el objetivo general, al menos lo es para mí.

    – T. Garrett

    18/09/2015 a las 17:04


  • @TGarrett, ¿no cree que el código legible y mantenible debería ser el objetivo?

    – James Colina

    19/09/2015 a las 14:56

  • @jameshill, sí señor, la legibilidad es una gran preocupación cuando se trata de todo el código y tener al desarrollador detrás de usted que hará cambios en su código, debería ser muy fácil de aprender para ellos, sin importar el nivel de codificación que tenga la persona. derrotar. Lo que hice fue limpiar las piezas que me parecían redundantes, como tener un operador igual para una boleana cuando simplemente puede eliminarlo y agregar cualquier operador lógico allí, como “!”, para la mayoría de los que han estado programando a durante algún tiempo (1-2 años), podrá recuperarlo muy rápido. Los diferentes estilos de codificación son otra discusión que sucede:

    – T. Garrett

    21/09/2015 a las 15:05

¿Ha sido útil esta solución?