- PHP
- 2019-09-10
以前、PHPでの日付の加算・減算についてご紹介しました。
その時の記事はこちら↓
日付の加算・減算 DateTimeクラス
その際、月の加減については31日が加減されると記載しました。
例えば12月31日に2ヶ月を加算した場合は、翌年の3月3日になります。
今回はそのような事態にならない回避方法をご紹介します。
// 基準とする日付のオブジェクトを生成する $myDate = new DateTime("2018-12-31"); // 新規日付オブジェクトを生成 $newDate = new DateTime(); // 2ヶ月後の末日を取得 $newDate->setDate($myDate->format("Y"), $myDate->format("n") + 2 + 1, 0);
※日付に「0」を指定することで前月の末日を取得することができます。
3ヶ月前の末日を取得する
// 2ヶ月を加算する $myDate->add(new DateInterval("P2M")); echo $myDate->format("Y-m-d")."\n"; echo $newDate->format("Y-m-d")."\n";
ここでの出力結果
2019-03-03 2019-02-28
// 基準日オブジェクトと2ヶ月後末日との差を求める $result = $myDate->diff($newDate); //$resultには日付の間隔を表すDateIntervalオブジェクトが返されます。 if($result->invert == 1) { //間隔が負の数になっている場合は 1、そうでない場合は 0 echo "newDate\n"; echo $newDate->format("Y-m-d"); } else { echo "myDate\n"; echo $myDate->format("Y-m-d"); }
出力結果は以下のようになります。
newDate 2019-02-28