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日間の月の特殊なケースのようです。

「-1か月」を31日ある月の最後の日に使用すると、予期しない結果が生じる可能性があることに注意して ください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 に答える