new intervalos intervalo interval hours for php foreach date

intervalos - Tengo 2 fechas en PHP, ¿cómo puedo ejecutar un ciclo foreach para pasar por todos esos días?



php for date (8)

Estoy comenzando con una fecha 2010-05-01 y terminando con 2010-05-10 . ¿Cómo puedo iterar a través de todas esas fechas en PHP?


Aquí hay otro simple -

/** * Date range * * @param $first * @param $last * @param string $step * @param string $format * @return array */ function dateRange( $first, $last, $step = ''+1 day'', $format = ''Y-m-d'' ) { $dates = []; $current = strtotime( $first ); $last = strtotime( $last ); while( $current <= $last ) { $dates[] = date( $format, $current ); $current = strtotime( $step, $current ); } return $dates; }

Ejemplo:

print_r( dateRange( ''2010-07-26'', ''2010-08-05'') ); Array ( [0] => 2010-07-26 [1] => 2010-07-27 [2] => 2010-07-28 [3] => 2010-07-29 [4] => 2010-07-30 [5] => 2010-07-31 [6] => 2010-08-01 [7] => 2010-08-02 [8] => 2010-08-03 [9] => 2010-08-04 [10] => 2010-08-05 )


Copia de la muestra de php.net para el rango inclusivo :

$begin = new DateTime( ''2012-08-01'' ); $end = new DateTime( ''2012-08-31'' ); $end = $end->modify( ''+1 day'' ); $interval = new DateInterval(''P1D''); $daterange = new DatePeriod($begin, $interval ,$end); foreach($daterange as $date){ echo $date->format("Ymd") . "<br>"; }


Esto también incluye la última fecha

$begin = new DateTime( "2015-07-03" ); $end = new DateTime( "2015-07-09" ); for($i = $begin; $i <= $end; $i->modify(''+1 day'')){ echo $i->format("Y-m-d"); }

Si no necesita la última fecha, simplemente elimine = de la condición.


La conversión a marcas de tiempo de Unix hace que sea más fácil hacer matemática de fecha en php:

$startTime = strtotime( ''2010-05-01 12:00'' ); $endTime = strtotime( ''2010-05-10 12:00'' ); // Loop between timestamps, 24 hours at a time for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) { $thisDate = date( ''Y-m-d'', $i ); // 2010-05-01, 2010-05-02, etc }

Cuando use PHP con una zona horaria con horario de verano, asegúrese de agregar un horario que no sea 23:00, 00:00 o 1:00 para protegerlo contra días omitiendo o repitiendo.


Requiere PHP5.3:

$begin = new DateTime(''2010-05-01''); $end = new DateTime(''2010-05-10''); $interval = DateInterval::createFromDateString(''1 day''); $period = new DatePeriod($begin, $interval, $end); foreach ($period as $dt) { echo $dt->format("l Y-m-d H:i:s/n"); }

Esto generará todos los días en el período definido entre $start y $end . Si desea incluir el décimo, establezca $end en el 11mo. Puede ajustar el formato a su gusto. Ver el Manual de PHP para DatePeriod .


Usuario esta función: -

function dateRange($first, $last, $step = ''+1 day'', $format = ''Y-m-d'' ) { $dates = array(); $current = strtotime($first); $last = strtotime($last); while( $current <= $last ) { $dates[] = date($format, $current); $current = strtotime($step, $current); } return $dates; }

Llamada de uso / función: -

Aumentar por un día: -

dateRange($start, $end); //increment is set to 1 day.

Aumento por mes: -

dateRange($start, $end, "+1 month");//increase by one month

utilice el tercer parámetro si desea establecer el formato de fecha: -

dateRange($start, $end, "+1 month", "Y-m-d H:i:s");//increase by one month and format is mysql datetime


aquí hay una manera:

$date = new Carbon(); $dtStart = $date->startOfMonth(); $dtEnd = $dtStart->copy()->endOfMonth(); $weekendsInMoth = []; while ($dtStart->diffInDays($dtEnd)) { if($dtStart->isWeekend()) { $weekendsInMoth[] = $dtStart->copy(); } $dtStart->addDay(); }

¡El resultado de $ weekendsInMoth es una variedad de días de fin de semana!


$startTime = strtotime(''2010-05-01''); $endTime = strtotime(''2010-05-10''); // Loop between timestamps, 1 day at a time $i = 1; do { $newTime = strtotime(''+''.$i++.'' days'',$startTime); echo $newTime; } while ($newTime < $endTime);

o

$startTime = strtotime(''2010-05-01''); $endTime = strtotime(''2010-05-10''); // Loop between timestamps, 1 day at a time do { $startTime = strtotime(''+1 day'',$startTime); echo $startTime; } while ($startTime < $endTime);