カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

日本的日付の加算・減算

この記事は最終更新日から1年以上経過しています。

以前、PHPでの日付の加算・減算についてご紹介しました。
その時の記事はこちら↓
日付の加算・減算 DateTimeクラス

その際、月の加減については31日が加減されると記載しました。

例えば12月31日に2ヶ月を加算した場合は、翌年の3月3日になります。

今回はそのような事態にならない回避方法をご紹介します。

1// 基準とする日付のオブジェクトを生成する
2$myDate = new DateTime("2018-12-31");
3 
4// 新規日付オブジェクトを生成
5$newDate = new DateTime();
6 
7// 2ヶ月後の末日を取得
8$newDate->setDate($myDate->format("Y"), $myDate->format("n") + 2 + 1, 0);

※日付に「0」を指定することで前月の末日を取得することができます。
3ヶ月前の末日を取得する

1// 2ヶ月を加算する
2$myDate->add(new DateInterval("P2M"));
3 
4echo $myDate->format("Y-m-d")."\n";
5 
6echo $newDate->format("Y-m-d")."\n";

ここでの出力結果

1// 基準日オブジェクトと2ヶ月後末日との差を求める
2$result = $myDate->diff($newDate);
3 
4//$resultには日付の間隔を表すDateIntervalオブジェクトが返されます。
5 
6if($result->invert == 1) { //間隔が負の数になっている場合は 1、そうでない場合は 0
7 
8    echo "newDate\n";
9    echo $newDate->format("Y-m-d");
10 
11} else {
12 
13    echo "myDate\n";
14    echo $myDate->format("Y-m-d");
15 
16}

出力結果は以下のようになります。

この記事がお役に立ちましたらシェアお願いします
1,282 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です