14

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

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

输出2012-05-01。这是一个php错误吗?顺便说一句,$date = new DateTime('-1 month');输出相同。

4

2 回答 2

24

对于有 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

然后这取决于你要对日期做什么。

于 2012-05-31T11:49:30.143 回答
7

我认为您需要有一个已经存在的日期时间并对其进行修改,如下所示:

<?php
$d = new DateTime( date("Y-m-d") );
$d->modify( 'last day of previous month' );
echo $d->format( 'Y-m-d' ), "\n";
?>
于 2012-05-31T11:38:32.597 回答