jueves, mayo 06, 2010

Validación de fecha con javascript

Aquí les dejo una pequeña función que recibe una fecha y valida que ésta exista (por aquello de los años bisiestos).

function validaFecha(fecha)
{
var resultado = true;
var dia = fecha.substring(0,2);
var mes = fecha.substring(3,5);
var ano = fecha.substring(6,10);
var maxDias = 31;
if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
maxDias = 30;
if (mes == 2)
{
if (ano % 4 == 0)
maxDias = 29;
else
maxDias = 28;
}
if (mes>12 || mes<1)>
if (dia>31 || dia<1)>
if (ano<1980>2200) return false;
if (dia>maxDias) return false;
return(resultado);
}

La premisa es simple, la mayoría de los meses del año (enero, marzo, mayo, julio, agosto, octubre y diciembre) tienen 31 días, por eso es el valor por defecto del máximo número de días del mes. Solo hay que ver que el máximo número de días cambie a 30 en el caso de los meses que así lo requieren (abril, junio, septiembre y noviembre); en caso de que sea febrero, habrá que determinar si es un año bisiesto (para ello me basé en la documentación de la wikipedia), el resto se explica por sí mismo.

El formato de fecha que espera ésta función es: dd/mm/aaaa, o sea, dos dígitos para el día, dos para el mes y cuatro para el año; en realidad el separador de éstos es indistinto, por lo que es factible utilizar "/" ó "-". El ejemplo de fecha para validar bajo ésta máscara es: 06/05/2010.

UPDATE:
La misma función pero con un par de líneas de código menos para hacerla más estética

function validaFecha(fecha)
{
var dia = fecha.substring(0,2);
var mes = fecha.substring(3,5);
var ano = fecha.substring(6,10);
var maxDias = 31;
if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
maxDias = 30;
if (mes == 2)
{
if (ano % 4 == 0)
maxDias = 29;
else
maxDias = 28;
}
if (mes>12 || mes<1)>
if (dia>maxDias || dia<1)>
if (ano<1980>2200) return false;
return(true);
}