Comprobar la validez de una fecha

Ya comenté cómo verificar la entrada del usuario empleando expresiones regulares con Javascript. En aquel ejemplo nos asegurábamos de que la fecha proporcionada por el usuario se ajustaba a un patrón (dd/mm/aaaa), pero no comprobábamos que el valor introducido fuera válido. Por ejemplo: 30/02/2006, se ajusta al patrón pero no es una fecha válida.

Si buscamos en Internet seguro que encontramos muchas funciones, largas y elaboradas, que hacen más o menos el complicado trabajo de la comprobación. Ayer se me ocurrió una forma muy fácil de hacerlo, y es empleando el objeto Date y su función setFullYear.

Con dicha función podemos indicar una fecha con el día, el mes y el año como entrada, y si los valores son erróneos, la función dará una aproximación. Así si comprobamos que la fecha creada no es igual a la introducida por el usuario, se ha producido la citada aproximación, y podemos concluir que la fecha indicada por el usuario no es válida.

código javascript
/* la forma de verificar el formato es la que ya comentamos */
re=/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]$/
if(f.length==0 || !re.exec(f))
{
	alert("La fecha no tiene formato correcto.")
	return
}
 
/* comprobamos que la fecha es válida */
var d = new Date()
/* la función tiene como entrada: año, mes, día */
d.setFullYear(f.substring(6,10), 
	      f.substring(3,5)-1,
	      f.substring(0,2))
 
/* ¿el mes del objeto Date es el mes introducido por el usuario?
   OJO: getMonth() devuelve el número de mes del 0 al 11
 
   ¿el día del objeto Date es el día introducido por el usuario?
   OJO: getDate() devuelve el día del mes */
if(d.getMonth() != f.substring(3,5)-1 
	|| d.getDate() != f.substring(0,2))
{
	alert("Fecha no válida.")
	return
}

Veamos cómo queda:

Fecha:

Es una forma efectiva y cómoda de hacer la comprobación de la validez de la fecha, porque eso de mirar el mes para comprobar que el día está en rango, calcular los casos de años bisiestos para Febrero, etc; es un rollo ;).

Actualización: Resulta que el parseInt no convertía algunas cadenas númericas como se esperaba. La conversión de tipos automática de Javascript vía operadores sí funciona. Gracias a los provadores ;).


Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 2 comentarios:

Gravatar
28/07/2006 10:32:01
Seguro?
por Felipe (IP: 213.97.94.*)
Comentario de Felipe
Porqué 15/06/1945 es válida y 15/08/1945 no es válida?
Me lo explique ;-)
Gravatar
28/07/2006 11:28:06
Otra más
por r0sk (IP: 217.130.44.*)
Comentario de r0sk
Siempre tocando las bowlings he probado con las fechas mágicas de cal, ni 02/09/1752 es válida ni 03/09/1752.

Si te fijas con un '$cal 9 1752' hay un salto del 2 al 14. Pensé que el 2 validaría mientras que el 3 no, peeero me he equivocado :D.

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.