rango obtener meses los fechas fecha entre comparar actual php date loops php4

obtener - rango de fechas php



PHP: Bucle a través de todos los meses en un rango de fechas? (6)

Si tengo una fecha de inicio (digamos, 2009-02-01 ) y una fecha de finalización (digamos, 2010-01-01 ), ¿cómo puedo crear un ciclo para pasar por todas las fechas (meses) en el rango?


Ejemplo de combinación de clases DateTime , DateInterval y http://www.php.net/manual/en/class.dateperiod.php :

$start = new DateTime(''2009-02-01''); $interval = new DateInterval(''P1M''); $end = new DateTime(''2011-01-01''); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { echo $dt->format(''F Y'') . PHP_EOL; }


La respuesta aceptada no es la correcta.

Intenté este fragmento y no funciona correctamente. Si su fecha de inicio es el final del mes y la fecha de finalización es el comienzo del tercer mes.

Por ejemplo: 2014-08-31 - 2014-10-01

Esperado debería ser.

  • agosto
  • septiembre
  • octubre

La mejor solución es:

$start = new DateTime(''2010-12-02''); $start->modify(''first day of this month''); $end = new DateTime(''2012-05-06''); $end->modify(''first day of next month''); $interval = DateInterval::createFromDateString(''1 month''); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { echo $dt->format("Y-m") . "<br>/n"; }

Referencia: cómo enumerar todos los meses entre dos fechas


Me gusta la simplicidad de la respuesta aceptada, pero como 3s2ng, no siempre funciona. Así que lo cambié así:

$start = strtotime(''2009-02-01''); $startmoyr = date(''Y'', $start) . date(''m'', $start); $end = strtotime(''2013-12-01''); $endmoyr = date(''Y'', $end) . date(''m'', $end); while ($startmoyr <= $endmoyr) { echo date("F Y", $start) . "<br>"; $start = strtotime("+1month", $start); $startmoyr = date(''Y'', $start) . date(''m'', $start); }


Tengo un método que es óptimo en los resultados:

$begin = new DateTime( ''2014-07-14'' ); $end = new DateTime( ''2014-08-01'' ); $end = $end->modify( ''+1 month'' ); $interval = DateInterval::createFromDateString(''1 month''); $period = new DatePeriod($begin, $interval, $end); foreach($period as $dt) { var_dump($dt->format( "m" )); }

Una ventaja para el método de @Glavic


Tratar

$start = $month = strtotime(''2009-02-01''); $end = strtotime(''2011-01-01''); while($month < $end) { echo date(''F Y'', $month), PHP_EOL; $month = strtotime("+1 month", $month); }

Tenga en cuenta la nota http://php.net/manual/de/datetime.formats.relative.php

Los valores relativos de mes se calculan en función de la duración de los meses que pasan. Un ejemplo sería "+2 mes 2011-11-30", que produciría "2012-01-30". Esto se debe a que noviembre tiene 30 días de duración y diciembre tiene 31 días de duración, lo que arroja un total de 61 días.

A partir de PHP5.3 puede usar http://www.php.net/manual/en/class.dateperiod.php


$start = strtotime(''2011-09-01''); $end = strtotime(''2013-12-01''); while($start < $end) { echo date(''F Y'', $start) . ''<br>''; $start = strtotime("+1 month", $start); }