Un caso que nos podremos encontrar al desarrollar una web, es validar una fecha introducida por el usuario. Con esto me refiero a que por ejemplo no meta una fecha como 30 de febrero. Además, mostraré como crear una función que no sólo nos permitirá validar una fecha en PHP sino también restar fechas para obtener la edad.
Validar una fecha con checkdate()
Esta función devuelve true si el mes esta entre 12 y 1, el año entre 1 y 12767 y el día está entre 1 y el máximo correspondiente que varía en función del mes y el año. También tiene en cuenta los años bisiestos y las fechas se basan en el calendario Gregoriano.
Para poder emplear esta función tenemos que pasarle el mes, día y año, en ese orden.
1 2 3 4 5 |
//$valido sera true ya que la fecha 26 de mayor de 2018 es correcta $valido = checkdate(5, 26, 2018); //$no_valido sera false ya que la fecha 30 de febrero de 2001 no es correcta $valido = checkdate(2, 30, 2000); |
Como checkdate nos proporciona un amplio rango de fechas válidas, podremos agregar validación adicional sin complicaciones.
Cómo restar 2 fechas válidas
Vamos a poner el mítico ejemplo de la mayoría de edad pero, en vez de tener en cuenta solamente la edad mínima de mayoría de edad vamos a tener en cuenta la máxima que serían 122 años partiendo que la persona más longeva tiene esa edad.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php function comprobar_edad($dia, $mes, $año) { $edad_min = 18; $edad_max = 122; //Nos aseguramos que la fecha es valida if (! checkdate($mes, $dia, $año)) { return false; } //Obtenemos la fecha de hoy y le damos formato $hoy = new DateTime(); $fecha_introducida_formateada = sprintf("%d-%d-%d", $año, $mes, $dia); $fecha_introducida = DateTime::createFromFormat("Y-n-j|",$fecha_introducida_formateada); //Obtenemos la edad empleando la funcion diff del objeto $hoy y lo comparamos con la fecha introducida $edad = $hoy->diff($fecha_introducida); if (($edad->y < $edad_min)|| ($edad->y > $edad_max)) { return FALSE; } else { return TRUE; } } if (comprobar_edad(23,3,1896)) { print "Tienes edad para entrar."; } else { print "NO tienes edad para entrar."; } ?> |
Una vez que nos aseguramos que la fecha es válida con checkdate(), obtenemos la fecha de hoy con DateTime(). Antes de comprarla con la fecha introducida, tenemos que eliminar ceros que sobren empleando sprintf(). Una vez dado el formato empleamos la función estática de DateTime que la fecha tenga el formato inglés y así poder usarla en la resta.
Para realizar la resta empleamos la función Diff() que nos devolverá la diferencia en las unidades que queramos. En este caso, queremos la diferencia en años ($edad->y) y hacemos la comprobación de la de edad.
Espero que os haya gustado este post sobre cómo validar una fecha en PHP. A seguir picando 🙂