Supongamos que desarrollamos  una aplicación web que restringe el acceso a menores de edad (Sitios de apuestas por ejemplo), aunque nada impide que el usuario nos facilite fechas falsas, nuestro desarrollo debe proveer mecanismos de validación de que las fechas suministradas sean correctas (No permitiendo valores como 31 de Febrero) y que estas fechas cumplan con un determinado rango de edades permitidas para poder entrar al sitio (solo Mayores de 18 años).

Así que trabajaremos con 2 necesidades:

  • Validar que la fecha introducida es correcta.
  • Comprobar que la fecha esté dentro de un rango de edades permitidas para entrar.

 

Validar que la fecha es correcta

Para esta necesidad PHP nos facilita el método checkdate($month,$day,$year), que nos comprueba que el mes “$month”, el día “$day” y el año “$year” sean una fecha válida. Por ejemplo:

1
2
3
4
5
6
// 28 de febrero de 2009
$valida= checkdate(02,28,2009);  //  $valida= True
// 29 de Febrero de 2008, es bisiesto
$valida= checkdate(02,29,2008); // $valida=True
// 33 de Marzo de 2010
$valida= checkdate(03,33,2010); // $valida=False

Este método nos revisa si el mes se encuentra entre 1 y 12, el año entre 1 y 32767 y el dia entre 1 y el máximo de acuerdo al mes y año, basandose en el calendario Gregoriano.

 

Comprobar que la fecha esté entre un rango determinado

Para este requisito tendremos que desarrollar una función que nos realice la comprobación de fechas para determinar si se encuentra en un rango especifico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function checkFechaRango($month,$day,$year) {
$edadMinima = 18;
// Comprobamos que la fecha es valida
if (! checkdate($month,$day,$year)) {
return false;
}
//Determinamos la fecha de hoy
list($this_year,$this_month,$this_day) = explode(',',date('Y,m,d'));
//Determinamos el año de nacimiento minimo permitido
$minYear = $this_year - $edadMinima;
// Si el año de nacimento es anterior al minimo se permite la entrada
if ( $year < $minYear) {
return true;
}elseif (   ($year == $minYear)  &&   (  ($month < $this_month) ||(  ($month == $this_month) && ($day <= $this_day) ) ) ){
return true;
}else{
return false;
}
}

Al utilizarlo en nuestro script podemos comprobar si la fecha de nuestro usuario está dentro del rango:

1
2
3
4
5
6
if (checkFechaRango(11,18,1993)) {
print "Puedes entrar en este site";
} else {
print "Eres muy joven para entrar";
exit( );
}

 

(Visited 537 times, 1 visits today)