Blog de Gonzalo

RECORRER RANGO DE FECHAS EN PHP

Hay veces que por necesidades del proyecto es necesario recorrer rango de fechas en php y en este post os voy a poner tres maneras, 2 de ellas usando el objeto datetime de datetime y otra de ellas pasando la fecha a timestamp:

  • 
    $fecha_inicial = new DateTime('19-03-2021');
    $fecha_final = new DateTime('19-04-2021');
    // Necesitamos modificar la fecha final en 1 día para que aparezca en el bucle
    $fecha_final = $fecha_final ->modify('+1 day');
    
    $intervalo = DateInterval::createFromDateString('1 day');
    $periodo = new DatePeriod($fecha_inicial , $intervalo, $fecha_final);
    
    foreach ($periodo as $dt) {
        echo $dt->format("Y-m-d\n");
    }
    
    Como se puede ver en este ejemplo se declaran dos objetos datetime y luego se crea un objeto DateInterval, el cual representa un intervalo de fechas o una cantidad fija de "instantes" como horas,días, meses, años, ...
    También se puede ver en este ejemplo que se crea un objeto DatePeriod que representa un período de fechas que permite la iteración sobre un conjunto de fechas y horas, repitiéndose a intervalos regulares durante un período dado.
  • 
    $fecha_inicial = new DateTime('19-03-2021');
    $fecha_final = new DateTime('19-04-2021');
    for($i = $fecha_inicial; $i <= $fecha_final; $i->modify('+1 day')){
        echo $i->format("Y-m-d");
    }
    
    En este caso no se usa ni el objeto dateinterVal ni el objeto DatePeriod sino el método modiy, que altera la marca temporal de un objeto DateTime aumentando o disminuyendo en un formato aceptado por strtotime.
  • El último ejemplo se hace de una manera más sencilla, que es pasando las fechas a timestamp:
    
    $fechaInicio=strtotime("19-03-2019");
    $fechaFin=strtotime("20-04-2019");
    //86400 es el número de segundos que tiene 1 día
    for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){
        echo date("d-m-Y", $i);
    }
    


Espero que este post os haya parecido interesante