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日),然后给出正确的月份.它比其他方法更清洁,更容易记住.
echo date('m/Y', strtotime(date('Y-m') . '-01 +2 months'));
Run Code Online (Sandbox Code Playgroud)
只需将其硬编码为本月的第一个。