Lenguaje PHP

Validar rango de fechas en php: Ejemplos completos

Validar rango de fechas en php. El uso de rango de fechas es vita en cualquier sistema y/o página web que estemos desarrollando. En algún momento nos chocaremos con este aspecto.

Por lo tanto, en este artículo veremos cómo verificar si una fecha se encuentra dentro de un rango de fechas dadas. Todo con el objetivo de mostrar un mensaje.

¿Cómo funciona este código?

Básicamente, lo haremos de una manera muy sencilla. La idea es la siguiente: Vamos a mostrar un mensaje si una determinada fecha está dentro del rango programado para el mantenimiento de la empresa:

Si la fecha está dentro del rango, es decir que se encuentre en el mes de Junio. El sistema mostrara un mensaje similar a:
Estamos en mantenimiento, vuelva pronto.

Si por alguna razón la fecha este fuera de ese rango, el sistema mostrara el siguiente mensaje:
Atendemos de Lunes a viernes, horario de oficina.”.

Como observamos, para darle solución a este tipo de problemas podemos hacerlo desde diferentes formas. Sin embargo, también podemos validarlo si usamos información extraída de una base de datos como MySQL.

Validar rango de fechas en php

A continuación, veremos ejemplos completos para validar una fecha dentro de dos fechas dadas.

ESTRUCTURA Y SOLUCIÓN DEL PROBLEMA

Para dar solución a este problema, mostraremos 3 soluciones.

a) Usando una función PHP

Contenido de la función que usaremos para verificar la fecha dentro del rango: verifica_rango

function verifica_rango($date_inicio, $date_fin, $date_nueva) {
   $date_inicio = strtotime($date_inicio);
   $date_fin = strtotime($date_fin);
   $date_nueva = strtotime($date_nueva);
   if (($date_nueva >= $date_inicio) && ($date_nueva <= $date_fin))
	   return true;
   return false;
}

La función anterior trabaja con 3 parámetros:

  1. Primero: la fecha de inicio del mantenimiento de la empresa.
  2. Segundo: la fecha de fin del mantenimiento
  3. Tercero: La fecha actual.

La función convertirá las 3 fechas dadas en UNIX usando la función predeterminada del PHP como ser el strtotime(). Por lo tanto, una vez convertido las fechas lo compara y muestra un resultado dentro de una condicional IF ELSE.

Aplicación de esta función:

<?php

$date_nueva = date('Y-m-d');
$date_inicio = date('Y-06-01');
$date_fin = date('Y-06-31');
 
if (verifica_rango($date_inicio, $date_fin, $date_nueva)) {
    echo '<div class="alert alert-danger">Salimos de vacaciones.</div>';
}
else {
    echo '<div class="alert alert-success">Atendemos de Lunes a viernes.</strong></div>';
}
?>

Si la variable $date_nueva se encuentra dentro del rango mostrara a leyenda «Estamos en mantenimiento, vuelva pronto.«. Caso contrario mostrara el mensaje «Atendemos de Lunes a viernes, horario de oficina.»

b) Usando la función: explode

Si tu sistema trabaja con formato de fechas (dd-mm-yyyy) (dia-mes-año) puedes utilizar la función predeterminada explode de PHP para obtener solo el año y realizar la condición solicitada:

$fecha = "20-12-2010";
// Extrae el año de una fecha dada
$fechaSeparada = explode("-", $fecha);
$anyo = $fechaSeparada[2];

if ($anyo >= 2016 && $anyo <=2017){
    echo "La fecha está dentro del periodo de mantenimiento";
}else{
    echo "La fecha está fuera del periodo de mantenimiento";
}

El resultado del código anterior será el siguiente: «La fecha está fuera del periodo de mantenimiento«.

c) Cuando usas formatos diferentes de fecha

Para lograr el mismo objetivo puedes usar la función strtotime junto con la función date del PHP, para obtener el año y luego poder compararlo para ver si está dentro del rango de fechas:

$fecha = "20-12-2010";
// Obtiene solo el año a partir de una fecha dada
$anyo = date('Y', strtotime($fecha));
// COndicional para verificar si esta dentro del rango de fechas.
if ($anyo >= 2016 && $anyo <=2017){
    echo "La fecha está dentro del periodo de mantenimiento";
}else{
    echo "La fecha está fuera del periodo de mantenimiento";
}

La compilación del siguiente código mostrara el mensaje de: «La fecha está fuera del periodo de mantenimiento«.
Ventaja de usar esta función:

Para obtener el año podría obtenerlo desde cualquier tipo de fecha, incluso el siguiente formato:

  • Uno: $fecha = «2010-12-20».
  • Dos: $fecha = «2010/12/20»;

Sin embargo, el resultado sería el mismo y te daría el mismo resultado.

d) Cuarta forma: Usando la clase DateTime

Es la tercera opción y podrías usar la clase DateTime y sacar con ->format("Y") el año de una fecha y así poder comprobar las fechas dentro de un rango dado:

Código usando DateTime:

<?php
$fecha1 = new DateTime('10-10-2011');
$fecha1 = $fecha1->format("Y"); // Imprime solo en año 2011
$fecha2 = new DateTime('10-10-2017');
$fecha2 = $fecha2->format("Y"); // Imprime solo el año 2016

$fechaInicio = new DateTime('20-12-2016');
$fechaInicio = $fechaInicio->format("Y"); // Imprime solo el año 2016
$fechaFin = new DateTime('01-02-2018');
$fechaFin = $fechaFin->format("Y");  // imprime solo el año 2018

// Creamos una función para verificar el rango de fechas
function validarFecha($fecha, $fechaInicio, $fechaFin) {

    return $fecha >= $fechaInicio && $fecha <= $fechaFin;
}

// FECHA 1: 2011
if (validarFecha($fecha1, $fechaInicio, $fechaFin)) {

    echo 'Esta dentro del periodo';

} else {

    echo 'Esta fuera del periodo'; // Imprime Resultado
}    
echo "<br><br>";

// FECHA 2: Esta en el rango
if (validarFecha($fecha2, $fechaInicio, $fechaFin)) {

    echo 'Esta dentro del periodo'; // Imprime resultado

} else {

    echo 'Esta fuera del periodo';
}
?>
Validar rango de fechas en php Ejemplos completos
Validar rango de fechas en php Ejemplos completos

CONCLUSIÓN

Como pueden ver, hemos dado solución al problema usando 3 alternativas para validar rango de fechas. Sin embargo, ustedes pueden usar cualquiera de las tres alternativas para corroborar una fecha si este se encuentra en un rango de pago, mantenimiento u otro caso.

Espero que la breve explicación les ayude en sus proyectos web. Un saludo a la distancia.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

4 comentarios

  1. estuve viendo lo de las fechas y aun no lo logro entender, tengo el siguiente problema resulta que tengo una tabla de fecha,saldo incial, saldo final. de cada dia
    pero quiero que el saldo incial del dia actual se compare con el saldo final del dia de anterior si es igual que marque el texto con un color si es diferente que lo marque con otro color, pero por mas que busco no le encuentro, no se si me pudieran apoyar de favor.

    les dejo el codigo que tengo, se que esta mal pero ya le busque de mil formas y no puedo usar la condicional.

    dataInicial));

    echo »;
    echo ».$r->idOs.»;
    echo ».$r->nomeCliente.»;
    echo ».$dataInicial.»;

    if ($r->saldo sfinal-$r->dataInicial.»- 1 days») {
    echo ‘ ‘. ‘$ ‘ . @number_format($r->saldo,2,’,’,’.’).’ ‘.»;
    } else {
    echo ‘ ‘. ‘$ ‘ . @number_format($r->saldo,2,’,’,’.’).’ ‘.»;
    }

  2. saludos tengo una consulta utilizando las funciones que facilitaste la adapte de la siguiente manera:

    <a href="vacedit.php?id=» class=»btn btn-success»>
    <a href="vacelim.php?id=» class=»btn btn-danger»>
    <a target="_black" href="imprimir.php?id=» class=»btn btn-primary»>

    = $date_inicio) && ($date_nueva <= $date_fin))
    return true;
    return false;
    }

    $date_nueva = date($datos1['fechasalida']);
    $date_inicio = date('Y-m-16');
    $date_fin = date('Y-m-31');
    if (verifica_rango($date_inicio, $date_fin, $date_nueva)) {

    echo '‘;
    }
    else {
    echo ‘‘;
    }

    ?>

    u me funciona solo que no al 100% lo que quiero hacer es consultar la fecha guardada en la bd y su esa fecha esta el dia es superior al 15 me muestre un botón y si es antes de esa fecha me muestre el otro boton, esto es para una consulta con múltiples registros, pero solo me lo muestra para un registro de todos los que están.

    me puedes ayudar??

    1. Hola Juan,

      Lo que puedes hacer es sumar o restar fechas de acuerdo a la fecha actual y la fecha guardada en la base de datos.
      Además puedes usar condicionales if else para poder validarlos y que de esa manera te muestre los botones que necesitas.

      Por otro lado para restar una fecha puedes observar el siguiente articulo que hablo sobre el tema:
      //restar dias a una fecha

      $fecha = date(‘Y-m-j’);
      $nuevafecha = strtotime ( ‘+2 day’ , strtotime ( $fecha ) ) ;
      $nuevafecha = date ( ‘Y-m-j’ , $nuevafecha );
      echo $nuevafecha;

      https://www.baulphp.com/como-sumar-o-restar-anos-a-una-fecha-en-php/
      https://www.baulphp.com/contar-dias-entre-fechas-php-ejemplos/

  3. saludos tengo una consulta utilizando las funciones que facilitaste la adapte de la siguiente manera:

    <a href="vacacionesedit.php?id=» class=»btn btn-success»>
    <a href="vacacioneselim.php?id=» class=»btn btn-danger»>
    <a target="_black" href="imprimir.php?id=» class=»btn btn-primary»>

    = $date_inicio) && ($date_nueva <= $date_fin))
    return true;
    return false;
    }

    $date_nueva = date($datos1['fechasalida']);
    $date_inicio = date('Y-m-16');
    $date_fin = date('Y-m-31');
    if (verifica_rango($date_inicio, $date_fin, $date_nueva)) {

    echo '‘;
    }
    else {
    echo ‘‘;
    }

    ?>

    u me funciona solo que no al 100% lo que quiero hacer es consultar la fecha guardada en la bd y su esa fecha esta el dia es superior al 15 me muestre un botón y si es antes de esa fecha me muestre el otro boton, esto es para una consulta con múltiples registros, pero solo me lo muestra para un registro de todos los que están.

    me puedes ayudar??

Deja una respuesta

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

Botón volver arriba