我想填充过去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个月的正确方法是什么?
答案 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');
}