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

如何使用PHP DateTime列出最近N个月,php,datetime,Php,Datetime,我想用最近5个月(包括当前月份)填充select输入。因此,在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'); //p

我想用最近5个月(包括当前月份)填充select输入。因此,在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
}
用PHP DateTime列出过去10个月的正确方法是什么?

$date=new DateTime(“2014/03/31”);
$date = new DateTime("2014/03/31");
for ($i = 0; $i <= 9; $i++) {
    $date->modify("-1 month");
    echo $date->format('F Y'); //populate select input
}
对于($i=0;$i修改(“-1个月”); echo$date->format('fy');//填充选择输入 }
您得到的是相同的2个月,因为当您从日期减去1个月时,其天数比上个月多。例如:从31.3减去1个月时,您将得到3.3.(同一个月),而不是28.2。正如您可能预期的那样

我的建议是获得当月的第一天,然后执行您的逻辑:

$dt=新日期时间(“本月第一天”);
对于($i=1;$i格式('fy'),“\n”;
$dt->修改('-1个月');
}

的可能重复项(正好相反)@deceze-虽然我很高兴看到其他解决方案,但您的链接没有显示带有DateTime的解决方案。为什么它必须是
DateTime
mktime
更适合此过程。@deceze-例如,请参见.strotime对2038年之后的日期有限制。如果您的代码在2038年运行的系统仍然是s我们可以接受Y2K38问题,不管这个特殊的编码问题如何,您的代码可能会在某个地方崩溃。我看不到UNIX时间戳会完全消失,所以这个问题必须在几乎所有系统上解决:)谢谢。有关于“-1个月”和“-1个月”之间不同行为的文档吗“一个月前。”?是的,你可以在这里找到更多
$date = new DateTime("2014/03/31");
for ($i = 0; $i <= 9; $i++) {
    $date->modify("-1 month");
    echo $date->format('F Y'); //populate select input
}