Skip to content

Como validar una fecha, considerando año bisiesto y número de días de acuerdo al mes

febrero 2, 2011

Si has tenido que verificar si una fecha es o no correcta, pero te causa problema lo del año bisiesto, es decir, ¿Cómo sé, que año febrero tiene 28 y que año tiene 29 días?, o bien ¿como saber si el mes que se está anotando en esa ocasión es de 30 o 31 días?. Para poder validar una fecha, considerando año bisiesto y número de días de acuerdo al mes, necesitas leer este artículo para que elabores la función que te puede ayudar a hacerlo de forma sencilla.

Por ejemplo; si necesitas que un usuario ingrese su fecha de nacimiento, pero necesitas  corroborar que esta fecha sea anotada correctamente, es decir, que no pueda capturar algo como “30/02/2013”, es necesario validar la fecha y en el caso que pase la validación pues mostrar al usuario su error.

Bien, veamos pues como se puede realizar esta función:

Primero: Para verificar que el año es bisiesto necesita cumplir con las siguientes condiciones:

  • Que al dividir el año entre 4 su residuo sea 0 y que al dividir el año entre 100 su residuo sea diferente a 0. En línea de programación de php se puede ver así:   
    • if ((($anio %  4)==0) &&($anio%100)!=0){ echo “Año bisiesto”;}
  • O bien si al dividir el año entre 100 y entre 400 su residuo es 0, es un año bisiesto, entonces completando la línea de arriba quedaría así:
    • if ((($anio %4)==0)&&(($anio%100)!=0) ||(($anio%100)==0) &&  ($anio%400)==0) { echo “Año bisiesto”;}

Segundo: Ahora como verificar si el mes tiene 30 o 31 días, veamos, Enero, Marzo, Mayo, Julio, Agosto, Octubre, Diciembre tienen 31 días y a excepción de Febrero los demás meses tiene 30 días, entonces podemos crear dos arreglos uno para el formato “01/Enero/2011” y otro para el formato “01/01/2011”.

$mes_nombre=array(“Enero”=>31,”Febrero” =>28,”Marzo” =>31,”Abril” =>30,”Mayo” =>31,”Junio” =>30,”Julio” =>31,”Agosto” =>31,”Septiembre” =>30,”Octubre” =>31,”Noviembre” =>30,”Diciembre” =>31);

$mes_indice=array(31,28,31,30,31,30,31,31,30,31,30,31);

Tercero: Ahora veamos como quedaría la función encargada de validar la fecha (suponiendo que se usa “/” para separa la fecha y esta viene en formato “Día/Mes/Año”.

function valida_fecha ($fecha){

//inicializamos los arreglos para comprobar el numero máximo de días de acuerdo al me

$mes_nombre=array(“Enero”=>31,”Febrero” =>28,”Marzo” =>31,”Abril” =>30,”Mayo” =>31,”Junio” =>30,”Julio” =>31,”Agosto” =>31,”Septiembre” =>30,”Octubre” =>31,”Noviembre” =>30,”Diciembre” =>31);

$mes_indice=array(31,28,31,30,31,30,31,31,30,31,30,31);

//ahora separamos la fecha para comenzar la validación

$fecha_seg = explode (“/”,$fecha);

if (((intval($fecha_seg[2])%4)==0)&&((intval($fecha_seg[2])%100)!=0) ||((intval($fecha_seg[2])%100)==0) &&  (intval($fecha_seg[2])%400)==0) {         //si es año bisiesto le agregamos un dia mas a febrero

                $mes_nombre["Febrero"]=29;

                $mes_indice[1]=29;

}

//verificamos que el dia no sea mayor al maximo del mes

$mes = intval($fecha_seg[1]);

if($mes == 0){

                $fecha_seg[0] > $mes_nombre[$fecha_seg[1]] ? $valida=”FALSE” : $valida=”TRUE” ;

}else{

//a $mes le quitamos uno por que los arreglos inician en 0

    $fecha_seg[0] > $mes_indice[$mes-1] ?  $valida=”FALSE” : $valida=”TRUE” ;

}

return $valida;

}

Sencillo verdad, si quieres ver integrado en un ejemplo sencillo puedes descargarlo dándole click aquí

Como siempre espero que sea de utilidad para ti, y sobretodo que sea entendible. Como siempre te invito a que me dejes tus comentarios y/o sugerencias, siempre leo y contesto los comentarios y me ayudan a darle dirección a mis artículos en lo que a ti te interesa.

Gracias, tu amigo
Salvador López

About these ads

From → inicial, Tips

5 comentarios
  1. Felix Piñate permalink

    Hola Salvador, actualmente estoy aprendiendo php y cuando tuve problemas para validar fecha me encontre con la función precontruida de php llamada checkdate, su uso es muy sencillo. Me pudieras informar que diferencia tiene esta función con respecto a la tuya.

    Saludos.

    • Si mira, para usar la función chekdate tienes que desglosar la fecha indicando con numeros enteros el mes, el día y el año. Y la función que aqui propongo puedes mandarle la fecha en el formato “01/01/2001″ (con numeros) o bien en el formato “01/Enero/2011″ y ambas verificara si es o no correcto. Lo que si es que esta función trabaja solo con el separador “/”, pero al ver la función puedes modifiacarlas mas facilmente a tus necesidades. Y gracias por mencionar la función “checkdate” ya que es un excelente opción para la validación de fechas. Gracias, muy buen aporte .

  2. Joel. permalink

    Gracias Salvador, y muy buenos aportes tienes en tu pagina, te felicito y sigue asi.

  3. Joel permalink

    Hola que tal Salvador, disculpa al parecer el archivo ya pusiste para descarga ya no esta disponible, te agradeceria si pudieras volver a subirlo. Gracias.

    • Tienes razón Joel, al parecer me equivoque en link, pero ya esta listo para su descarga y gracias por la observación de otra forma ni cuenta me habría dado de ello

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 135 seguidores

%d personas les gusta esto: