一尘不染

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

php

我正在使用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"));

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

01/2012
02/2012
03/2012

但是,相反,它实际上显示

01/2012
03/2012
03/2012

那是因为2月没有30号或31号,所以脚本将“ 31/02”转换为“ 01/03”。

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


阅读 483

收藏
2020-05-29

共1个答案

一尘不染

如文档中所述,您应该将当月第一天的日期作为第二个参数传递给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));

看到它有效:http :
//ideone.com/eXis9

01/2012

02/2012

03/2012

2020-05-29