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

标签 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")); 

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

01/2012
02/2012
03/2012

但是,它实际上显示的不是那个

01/2012
03/2012
03/2012

那是因为二月没有 30 日或 31 日,所以脚本将“31/02”翻译成“01/03”。

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

最佳答案

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

关于PHP date() 和 strtotime() 在 31 日返回错误的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058523/

相关文章:

python - Matplotlib 未显示 x 刻度标签

php - strtotime PHP 错误

php - 如何使用Zend2的SendResponseEvent

php - WC_Order->get_items() 返回空项目

JavaScript - 获取系统短日期格式

php - strtotime() 使用 DD.MM.YY 输入返回当前日期 - 为什么?

PHP strtotime 总是在午夜返回

php - 显示一次父表标题字段,然后显示组中的子记录

javascript - 使用 AJAX 的动态级联下拉列表

date - 如何比较 LocalDate 实例 Java 8