Función javascript para validar fechas

Esta función en Javascript nos permitirá de una forma rápida validar una fecha. Devolverá true o false dependiendo de si es correcta o no.

Para que sea más reutilizable, la fecha se le pasará como parámetro.

¿Qué validamos?

Esta función valida que el formato introducido sea dd/mm/yyyy, aunque se puede modificar de una forma sencilla.

Valida que todos los parámetros introducidos a excepción de las barras de separación “/” sean números.

También valida que el día y el mes se correspondan entre ellos, por ejemplo, en Abril no permitir introducir días mayores de 30.

Esta función también tiene en cuenta que cada 4 años es bisiesto.

function validarFecha(fecha) {
try{
var fecha = fecha.split("/");
var dia = fecha[0];
var mes = fecha[1];
var ano = fecha[2];
var estado = true;
if ((dia.length == 2) && (mes.length == 2) && (ano.length == 4)) {
switch (parseInt(mes)) {
case 1:dmax = 31;break;
case 2: if (ano % 4 == 0) dmax = 29;
 else dmax = 28;
 break;
case 3:dmax = 31;break;
case 4:dmax = 30;break;
case 5:dmax = 31;break;
case 6:dmax = 30;break;
case 7:dmax = 31;break;
case 8:dmax = 31;break;
case 9:dmax = 30;break;
case 10:dmax = 31;break;
case 11:dmax = 30;break;
case 12:dmax = 31;break;
}
dmax!=""?dmax:dmax=-1;

if ((dia >= 1) && (dia <= dmax) && (mes >= 1) && (mes <= 12)) {
for (var i = 0; i < fecha[0].length; i++) {
diaC = fecha[0].charAt(i).charCodeAt(0);
(!((diaC > 47) && (diaC < 58)))?estado = false:'';
mesC = fecha[1].charAt(i).charCodeAt(0);
(!((mesC > 47) && (mesC < 58)))?estado = false:'';
}
}

for (var i = 0; i < fecha[2].length; i++) {
anoC = fecha[2].charAt(i).charCodeAt(0);
(!((anoC > 47) && (anoC < 58)))?estado = false:'';
}

}else estado = false;
return estado;
}catch(err){
	alert("Error fechas");
}

Posible fallo

Esta función no contempla que cada 400 años también es bisiesto, para arreglarlo tendrías que dividir el año entre 100 y si el resto es 0, divides el número de nuevo (el original) entre 400, si vuelve a ser 0 entonces ese año será bisiesto :)

Gracias a Sam por la aclaración :)

PD: Función optimizada :D


Comparte este artículo

rss delicious meneame technorati webeame bitacoras enchilame fresqui google reddit

Temas relacionados


 

Trackbacks / Pingbacks


6 Comentarios

Deja un comentario


Autor    Ayoze dice:

Es un pelín chapucera, no? :P

Escrito el 25/04/08 a las 09:38:36 (#1) ( responder)

Autor    El profesor del chapuzas dice:

Lamentable la funcion!!!
Fueraaaa, fueraaaa, fueraaaaaa….

Escrito el 25/04/08 a las 09:49:07 (#2) ( responder)

Autor    Emilio dice:

Ayoze, ummm jajaja si, un poco, la verdad es que la tengo conmigo de hace tiempo, he ido añadiendo parche tras parche y nunca me he molestado en “optimizarla”

Si a alguien le sirve para algo…

De todas maneras hace ya bastante que no la uso, prefiero la validación de formularios de prototype :)

Escrito el 25/04/08 a las 10:24:36 (#3) ( responder)

Autor    Emilio dice:

El profesor del chapuzas, Sucio!!!! jajajaja exigo una satisfacción, no si al final me tocará poner la función bien y todo xD

Escrito el 25/04/08 a las 10:25:28 (#4) ( responder)

Autor    Emilio dice:

Ale, para los interesados ya está “con cara nueva”

Escrito el 25/04/08 a las 12:44:50 (#5) ( responder)

Autor    ScriptShow dice:

Aquí hay hay ejemplos y algo documentación al respecto.

El enlace:

http://www.elcodigo.net/tutoriales/jsavanzado/jsavanzado13.html#punto3

Espero sea de utilidad.

Escrito el 19/09/08 a las 21:14:24 (#6) ( responder)

Deja un comentario

Normas de uso
  • No insultes
  • Escribe sin faltas de ortografía
  • Si vas a contestar a alquien, utiliza el botón responder, se le avisará