如何循环一个PHP DatePeriod类的月份


How to loop through months of a PHP DatePeriod class?

我需要获得日期范围所跨越的所有数字月份。因此,对于2014年7月18日至2014年9月4日的范围,给我7,8,9。

这离我很近了:

$start = new DateTime('2014-07-18');
$interval = new DateInterval('P1M');
$end = new DateTime('2014-09-04');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
    echo $dt->format('n') . PHP_EOL;
}

它返回7和8,但是9月不返回9,因为它不是一个完整的P1M间隔。我想要得到7、8、9,而不管这个月的开始/结束日在哪里。

我走的方向对吗?

在本页找到答案:http://forums.phpfreaks.com/topic/275341-find-what-months-a-date-range-covers/

$start = new DateTime('2014-07-18');
$end = new DateTime('2014-09-04');
$inc = DateInterval::createFromDateString('first day of next month');
$end->modify('+1 day');
$p = new DatePeriod($start,$inc,$end);
foreach ($p as $d)
 echo $d->format('n') . PHP_EOL;

输出:

7 8 9