DateTime类和上个月

egi*_*gis 12 php datetime

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

 $date = new DateTime('last month');
 echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*Lee 22

这似乎是特殊情况,持续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
Run Code Online (Sandbox Code Playgroud)

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

  • 不,我不是太懒,我只是缺乏时间.无论如何,这不应该是我的责任.我只是想帮助:).这似乎有帮助 (3认同)

Cly*_*rog 7

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

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