DateTime类和上个月

时间:2012-05-31 11:33:12

标签: php datetime

我对DateTime类有一些奇怪的行为。
今天是2012-05-31。时区是“欧洲/维尔纽斯”。
以下代码

 $date = new DateTime('last month');
 echo $date->format('Y-m-d');

输出2012-05-01。这是一个php bug吗?顺便说一下,$date = new DateTime('-1 month');输出相同的内容。

2 个答案:

答案 0 :(得分:20)

这似乎是持续31天的特殊情况:

  

请注意,在具有31天的月份的最后一天使用时,“ - 1个月”可能会产生意外结果    (来自http://www.php.net/manual/de/datetime.formats.relative.php#102947

你能做的是:

$date = new DateTime('last day of last month'); // this is "2012-04-30" now
/// 'first day of last month' would work either, of course

然后这取决于你将如何处理日期。

答案 1 :(得分:7)

我认为你需要有一个已经存在的日期时间并修改它,如下所示:

<?php
$d = new DateTime( date("Y-m-d") );
$d->modify( 'last day of previous month' );
echo $d->format( 'Y-m-d' ), "\n";
?>