我正在尝试列出两个日期之间的所有月份。
例如; 开始日期是:2010-12-02,最后日期是:2012-05-06
2010-12-02
2012-05-06
我想列出这样的东西:
2010-12 2011-01 2011-02 2011-03 2011-04 . . . 2012-04 2012-05
这是我尝试过的,但根本没有用:
$year_min = 2010; $year_max = 2012; $month_min = 12; $month_max = 5; for($y=$year_min; $y<=$year_max; $y++) { for($m=$month_min; $m<=$month_max; $m++) { $period[] = $y.$m; } }
PHP 5.3
$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"; }
PHP 5.4或更高版本
$start = (new DateTime('2010-12-02'))->modify('first day of this month'); $end = (new DateTime('2012-05-06'))->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"; }
我们将开始日期和结束日期修改为每月第一天的部分很重要。如果我们不这样做,则当前日期要比2月的最后一天高(例如,非-年为28,leap年为29),则跳过2月。