Validar una fecha con PHP, formato y existencia

  • Por
Validar una fecha asegurando que la fecha existe y por tanto es válida, escrita en formato español: dd/mm/aaaa.

En este taller de PHP vamos a validar una fecha en formato español, algo como 21/02/2017, o en formatos aceptables (dd/mm/aaaa) como 2/3/2019. Esta tarea sería sencilla de realizar con expresiones regulares. Sencillo no porque hacer la expresión regular sea fácil, sino más bien porque sería una línea de código únicamente. Sin embargo, esa alternativa no te garantiza que la fecha sea además válida, desde el punto de vista del calendario.

En este artículo vamos a ver un algoritmo posible para validar la fecha, asegurando que el formato es el utilizado en el idioma español (dia, mes, año) y a la vez garantizar que es una fecha existente dentro del calendario. Es decir, que los valores de tiempo, juntos, tienen sentido. No admitimos meses con valores mayores de 31 días, comprobamos que febrero tiene tales o cuales días, que el mes no es mayor que 12, etc.

A pesar que son muchas validaciones las que a priori necesitaríamos realizar, nos basaremos en funciones disponibles en PHP que nos facilitarán mucho la vida.

Descomponer la fecha en sus diversos valores

El primer paso será descomponer nuestra fecha en sus distintos valores de día, mes y año. Esto lo hacemos con la función “explode” de PHP, que permite crear un array con los valores por separado en cada una de sus casillas.

$fecha = '04/05/2017';
$valores = explode('/', $fecha);

Después de este paso tendremos un array $valores con los datos: ['04', '05', '2017'].

A partir de aquí podemos comenzar con las validaciones.

Comprobar que tienes día, mes y año

Esta parte la podemos comprobar sencillamente verificando que el array resultante tiene exactamente 3 casillas. Esto se hace con la función count() de PHP, que nos devuelve el número de casillas de un array.

count($valores)

Verificar que la fecha existe en el calendario

Esta es la parte que podría parecer difícil, pero que en realidad es inmediato gracias a la función de PHP checkdate().

La función checkdate() recibe tres parámetros, el mes, el día y el año. Devuelve true si la fecha existe en el calendario y false si no tiene sentido con los valores indicados. Para usarla simplemente le pasamos los valores de mes, día, año que tenemos en el array.

checkdate($valores[1], $valores[0], $valores[2])

Crear una función que verifica la fecha en formato español

Finalmente, a fin de entregar un código más útil y reutilizable, veremos una función que nos hace el trabajo de comprobar esa corrección de la fecha.

function validar_fecha_espanol($fecha){
	$valores = explode('/', $fecha);
	if(count($valores) == 3 && checkdate($valores[1], $valores[0], $valores[2])){
		return true;
    }
	return false;
}

Realmente, si entendiste los pasos anteriores de este artículo no representará mucho problema para ti, ya que es simplemente ponerlo todo junto.

Podemos ver cómo funciona este ejemplo invocando la función y recogiendo los valores devueltos. Como son valores boleanos usaremos var_dump() para mostrarlos en pantalla.

var_dump(validar_fecha_espanol('21/02/1921'));
var_dump(validar_fecha_espanol('31/02/1921'));

Conclusión

Esperamos que te resulte de utilidad este artículo. Recuerda que en DesarrolloWeb.com tienes varios artículos diferentes sobre el tratamiento de fechas en PHP. Si tienes algún tipo de duda sobre cómo generar las fechas en cualquier tipo de formato te recomiendo que leas el artículo crear y convertir fechas con PHP que te explica los métodos más actuales y sencillos para trabajar con fechas en cualquier formato.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir