Comprobar si una fecha está dentro de un rango de fechas

El siguiente artículo os resultará bastante sencillo en cuanto al resultado pero estoy seguro que pensarlo y llevarlo a cabo no será tan fácil si no tienes unos altos conocimientos en programación PHP y conoces bien como funciona el sistema de fechas de PHP (algo complejo para el cerebro humano).

En su día necesité hacer un script que me permitiera saber en cada momento si la fecha actual está dentro de un rango de fechas. Todo con el simple objetivo ejecutar una acción u otra sabiendo que la fecha actual está dentro de un rango de fechas. Para hacerlo de forma sencilla, en el caso del ejemplo en funcionamiento lo que vamos a querer hacer es mostrar un mensaje «Estamos en vacaciones» en Agosto y el resto del año mostrar otro mensaje «Estamos abiertos».

Hemos creado la siguiente función:

function check_in_range($date_start, $date_end, $date_now) {
   $date_start = strtotime($date_start);
   $date_end = strtotime($date_end);
   $date_now = strtotime($date_now);
   if (($date_now >= $date_start) && ($date_now <= $date_end))
	   return true;
   return false;
}

Esta función recibe 3 parámetros: la fecha de inicio de las vacaciones, la fecha de fin de las vacaciones y la fecha actual. Dentro de la función convertimos las fechas a una fecha Unix con la función strtotime() para poder compararlas después. Entonces, si la fecha actual es mayor o igual a la fecha de inicio y la fecha actual es menor o igual a la fecha de fin, significará que la fecha actual está dentro del rango de fechas vacacionales. Retornamos True en ese caso, en caso contrario False.

A continuación mostramos un ejemplo de uso de esta función:

$date_now = date('Y-m-d');
$date_start = date('Y-08-01');
$date_end = date('Y-08-31');
 
if (check_in_range($date_start, $date_end, $date_now)) {
    echo '<div class="alert alert-info">Estamos de vacaciones.</div>';
}
else {
    echo '<div class="alert alert-success">Estamos abierto al público.</strong></div>';
}

En el ejemplo verificamos que la fecha actual esté dentro del mes de Agosto para mostrar el mensaje «Estamos en vacaciones» o por el contrario mostrar el mensaje «Estamos abiertos».

Ver ejemplo en funcionamiento

Si tienes una solución más sofisticada o tienes comentarios al respecto no dudes en darnos tu opinión.

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(6 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

6 respuestas a “Comprobar si una fecha está dentro de un rango de fechas”

  1. Tengo unas dudas.
    Entiendo que el condicional if (($date_now >= $date_start) && ($date_now <= $date_end)) implica que se deben cumplir ambas condiciones, es decir, que la fecha de hoy debe ser mayor que la de inicio y menor que la final. Sin embargo, he aplicado la función a una tabla de eventos en la que deben aparecer solo el mes actual y dos meses posteriores. y me aparecen el mes actual y dos meses anteriores, es decir, la función acepta que sea cierta solo una de las condiciones.
    ¿Cómo hago para que aparezcan solo el mes actual y dos meses posteriores, o sea, que se cumpla el && en ambas condiciones?

    Por otra parte, cuando llego a noviembre y tengo que indicar en $date_end dos meses más, la variable de fecha final: $date_end = date('Y-01-31'); pasa a ser enero, pero el año toma el actual, cuando debería ser ya el año siguiente.
    ¿Cómo hago para sumar 1 año al date(Y-01-… sin tener que poner manualmente 2022.

    Muchas gracias por la ayuda que nos prestan.

    • Jose Aguilar dice:

      Hola,

      En principio así debería cumplirse. Si no es así se tendrá que debugar ese código.

      Para lo del fin de año y el nuevo año, lo tendrás que controlar. Cuando estés en los meses finales, al año actual le puedes sumar +1 para componer la fecha final.

      Saludos

  2. Antonio dice:

    Buenas tardes, ya se que el post es de hace un año, pero estoy atascado. Estoy haciendo un programa de gestión de empleados, el cual tiene un $inicio_turno y un $fin_turno y calcula el tiempo trabajado. Pero no consigo encontrar la fórmula para calcular la cantidad de tiempo que ha pasado trabajando en horario nocturno que en España dura de 22 a 06 horas. Ejemplo:
    ——————–
    $inicio_turno: 2019-01-01 21:30:00
    $fin_turno: 2019-01-02 05:30
    Duración: 8:00:00
    Horas nocturnas: 07:30:00
    —————————–
    $inicio_turno: 2019-01-02 00:00
    $fin_turno: 2019-01-02 08:00:00
    Duración: 8:00:00
    Horas nocturnas: 06:00:00
    —————————–
    $inicio_turno: 2019-01-02 07:00:00
    $fin_turno: 2019-01-02 15:00:00
    Duración: 8:00:00
    Horas nocturnas: 00:00:00
    —————————–
    Que opinas? GRACIAS!!!!!!

  3. Marcos dice:

    excelente, veré si puedo integrarlo con «horas» y que me arroje disponible o no disponible dentro de un rango de tiempo transcurrido.

  4. esther dice:

    muchas gracias este post me ha servido de mucha ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre