> Faqs > Cómo saber si una fecha está en el futuro con PHP

Cómo saber si una fecha está en el futuro con PHP

Quiero hacer una función que, dada una fecha, me indique si es una fecha perteneciente al futuro. Con PHP.

El formato de la fecha es español, ej: 21/11/2019

Respuestas

Una posible forma es convertir la fecha de formato. Poniendo primero el valor del año, luego el valor del mes y por último el día. Así, al comparar las fechas como si fueran cadenas normales, se comparará primero el año, luego el mes y por último el día. Casualmente es el formato de las fechas de MySQL, por lo que se puede usar este formato para poder hacer la conversión y luego la comparación.

Puedes usar alguna función que te convierta la fecha de formato, como el que encuentras en este artículo de cambio de formato de fechas entre español y MySQL.

function cambiarFormatoAMysql($fecha){
    preg_match( '/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})/', $fecha, $mifecha);
    $lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
    return $lafecha;
}

Luego, apoyándote en esta función, puedes crear otra función que calcula si es una fecha futura. Esta función devuelve un true en caso que la fecha sea futura, o un false en caso que sea pasada.

function esFutura($fecha_espanol) {
    $fecha_origen = cambiarFormatoAMysql($fecha_espanol);
    $fecha_hoy = date('Y-m-d');
    if($fecha_origen > $fecha_hoy) {
        return true;
    }
    return false;
}

Las podrías usar más o menos de esta manera:

if(esFutura('30/06/2018')) {
    echo "\n es futura";
} else {
    echo "\n es pasada";
}

if(esFutura('02/12/2019')) {
    echo "\n es futura";
} else {
    echo "\n es pasada";
}

Solo ten en cuenta que la fecha que compruebes debe estar en formato dd/mm/aaaa. Si tuviera un formato iregular como d/m/aa (2/3/19) no te serviría. En ese caso buscaría otra estrategia porque estas funciones requieren el formato de dos dígitos para el día, dos dígitos para el mes y 4 dígitos para el año.

Sergio
361 11 31 13

Buenas,

Simplemente pasale a la función la fecha con el formato que has comentado y lo que hace la función es compararla con la fecha del día de hoy, muy simple pero cumple con lo que quieres.

public function comprobarFecha($fecha)
	{
		
		$fechaActual = date("j/n/Y"); 

		if($fechaActual < $fecha){		
			echo 'Fecha Futura';
		}else{
			echo 'Fecha pasada';
		}
	}
Cristian
125 6 13
No funciona bien, ya que la fecha en español tiene primero los días. Si hoy es día 28/11/2019 y compruebo con 30/10/2019 me da que es una fecha futura, incorrectamente.