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:
-
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, ...
$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"); }
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. -
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.
$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"); }
- 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); }