Vamos a crear una función que compruebe si una fecha está dentro de un rango.
Si no facilitamos fecha, la fecha a comprobar será la de hoy.
El rango estará formado por 2 fechas, si no facilitamos una de las dos, se comprobará que la fecha a comprobar sea mayor que la fecha de inicio del rango o sea menor que la fecha final del rango.
function date_in_range( $args ){
extract( $args );
$date = isset( $date ) ? new DateTime( $date ) : new DateTime( 'now' );
$init_date = isset( $init_date ) ? new DateTime( $init_date ) : false;
$end_date = isset( $end_date ) ? new DateTime( $end_date ) : false;
if($init_date && $end_date) {
$result = ( $date >= $init_date && $date <= $end_date ) ?
array(
'since' => $date->diff($init_date)->format('%a'),
'left' => $end_date->diff($date)->format('%a')
) :
false;
} elseif ($init_date) {
$result = ( $date >= $init_date ) ?
array(
'since' => $date->diff($init_date)->format('%a')
) :
false;
} else {
$result = ( $date <= $end_date ) ?
array(
'left' => $end_date->diff($date)->format('%a')
) :
false;
}
return $result;
}
La función recibe los parámetros a través de un array, y pueden ser:
date: La fecha a comprobar, si no la facilitamos se toma la fecha de hoy como la fecha a comprobar.init_date: La fecha inicial del rango. Si sólo se facilita esta fecha para el rango, se comprueba que la fecha a comprobar (date) sea mayor o igual.end_date: La fecha final del rango. La fecha a comprobar ha de ser menor o igual.
// Si cumple alguna condición array ( 'since' => diferencia entre $date y $init_date, 'left' => difenencia entre $end_date y $date ) // Si no cumple ninguna condición false
La función devuelve FALSE si no se cumple que la fecha esté en el rango.
Si la fecha a comprobar es mayor que la fecha inicial del rango, devolverá en un array asociativo con la clave 'since' el tiempo en formato TIMESTAMP que ha pasado desde el inicio del rango hasta la fecha a comprobar.
Y devolverá en una clave 'left' el tiempo que falta hasta la fecha final, si esta es mayor que la fecha a comprobar.