PHP date()和strtotime()在31日返回错误的月份

Mic*_* Wu 13 php date strtotime

我正在使用date()strtotime()功能在下拉列表中显示接下来的3个月.

PHP代码:

   echo date("m/Y",strtotime("+0 months")); 
   echo date("m/Y",strtotime("+1 months"));
   echo date("m/Y",strtotime("+2 months")); 
Run Code Online (Sandbox Code Playgroud)

但是,如果脚本在服务器日期为30或31时运行,则下个月(即2月)将显示为3月.即上面的脚本应该返回

01/2012
02/2012
03/2012
Run Code Online (Sandbox Code Playgroud)

但是,它实际上显示了,而不是那样

01/2012
03/2012
03/2012
Run Code Online (Sandbox Code Playgroud)

那是因为2月没有30或31,所以脚本将"31/02"翻译成"01/03".

我已经strtotime()在php.net上阅读了这个页面,这个问题已经提出,但是还没有任何有用的解决方案.那么有人可以帮我找一个解决这个问题的简单方法吗?提前致谢!

Tad*_*eck 28

如文档中所述,您应该将当月第一天的日期作为第二个参数传递给strtotime()函数:

$base = strtotime(date('Y-m',time()) . '-01 00:00:01');
echo date('m/Y',strtotime('+0 month', $base));
echo date('m/Y',strtotime('+1 month', $base));
echo date('m/Y',strtotime('+2 month', $base));
Run Code Online (Sandbox Code Playgroud)

看它是否有效:http://ideone.com/eXis9

01/2012

02/2012

03/2012


Sea*_*ney 12

尝试在你的strtotime中使用"first day of",如下所示:

strtotime("first day of +1 month");
Run Code Online (Sandbox Code Playgroud)

这将修复日期(在今天是1月30日的事件中),例如02-30(Yields march 2nd),将其转换为02-01(2月1日),然后给出正确的月份.它比其他方法更清洁,更容易记住.


Bra*_*rad 5

echo date('m/Y', strtotime(date('Y-m') . '-01 +2 months'));
Run Code Online (Sandbox Code Playgroud)

只需将其硬编码为本月的第一个。