由于当前月份/年份是 2012 年 1 月,为什么以下代码返回 2011 年 12 月而不是 2011 年 11 月?
echo date("F Y", strtotime("-2 months"));
如果有影响的话,这是在 PHP 5.3.0 上。
要获得您正在寻找的内容,您可以使用这个相当冗长的版本:
echo date("F Y", strtotime("first day of this month - 2 months"));
此处详细描述了原始版本的问题:http://derickrethans.nl/obtaining-the-next-month-in-php.html http://derickrethans.nl/obtaining-the-next-month-in-php.html。引述如下:
PHP 用户一次又一次地抱怨 PHP 下个月
日期字符串解析器不会转到下个月,而是跳到
下个月之后的那个;就像下面的例子一样:
<?php
$d = new DateTime( '2010-01-31' );
$d->modify( 'next month' );
echo $d->format( 'F' ), "\n";
?>
这个小脚本的输出将是 March。三月显然没有
跟随一月,因为二月介于两者之间。然而,当前
行为是正确的。内部发生以下情况:
下个月将月份编号(最初为 1)加一。这
日期为 2010-02-31。第二个月(二月)只有28
2010 年的天数,因此 PHP 通过继续计数来自动更正此错误
从 2 月 1 日起的天数。然后你会在 3 月 3 日结束。格式化
去掉年份和日期,得到输出 March。这个可以
当使用完整的日期格式回显日期时很容易看到,
将于 2010 年 3 月 3 日输出:
这是用于添加月份的情况,但当减去月份时,同样适用;没有 11 月 31 日,因此 strtotime 方法将其“更正”为 12 月 1 日。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)