如何使用PHP DateTime列出最后N个月

时间:2014-04-01 07:55:58

标签: php datetime

我想填充过去5个月(包括当月)的选择输入。因此,在2014年4月9日,选项看起来应该是这样的:

April 2014
March 2014
February 2014
January 2014
December 2013

我的第一个PHP DateTime解决方案似乎有效:

for ($i = 0; $i < 5; $i++) {
 $date = new DateTime($i.' months ago');
 echo $date->format('F Y'); //populate select input
}

但实际上它并没有处理边缘情况。例如,在2014年3月31日,它产生:

March 2014
March 2014
January 2014
December 2013
December 2013

使用PHP DateTime列出过去10个月的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

$date = new DateTime("2014/03/31");
for ($i = 0; $i <= 9; $i++) {
    $date->modify("-1 month");
    echo $date->format('F Y'); //populate select input
}

答案 1 :(得分:1)

你得到的是2个月,因为当你从日期减去1个月时,它比上个月有更多的日子。示例:从31.3减1个月。你会得到3.3。 (同月),而不是28.2​​。正如你所料......

我的建议是获得当月的第一天,然后按照你的逻辑行事:

$dt = new DateTime('first day of this month');
for ($i = 1; $i <= 10; $i++) {
    echo $dt->format('F Y'), "\n";
    $dt->modify('-1 month');
}

demo