日付の計算をする

 この節では、日付を計算する方法を確認しましょう。指定した日時より1ヶ月後などの計算が必要な場合があります。その場合、次の方法で計算することができます。

■ date関数で計算する

 date関数の第2引数に指定するタイムスタンプで、次のように指定することで計算した結果の日付文字列を取得できます。

例.
 ‘-3 hour’ //3時間前
 ‘+3 hour’ //3時間後
 ‘+3 day’ //3日後
 ‘+3 month’ //3ヶ月後
 ‘+3 year’ //3年後
 ‘2020/05/04 +3 day’ // 2020/05/07

○ ファイル

 「DateTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 DateCalcTest.php

サンプルダウンロード

○ プログラム

 「DateTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

DateCalcTest.php

  1. <body>
  2. <?php
  3. //現在の日時を表示する
  4. print('<h3>現在の日時</h3>');
  5. print(date('Y/m/d H:i:s'));
  6. print('<hr>');
  7. //2時間後の日時を表示する
  8. print('<h3>現在より2時間後</h3>');
  9. print(date('Y/m/d H:i:s', strtotime(' +2 hour')));
  10. print('<hr>');
  11. //日付を指定して表示する
  12. $targetdate = date('Y/m/d H:i:j', strtotime('2020/12/23 10:11:23'));
  13. print('<h3>ターゲットの日時</h3>');
  14. print($targetdate);
  15. print('<hr>');
  16. //1年後の日時を表示する
  17. print('<h3>ターゲットより1年後</h3>');
  18. print(date('Y/m/d H:i:s', strtotime($targetdate . ' +1 year')));
  19. print('<hr>');
  20. //5ヵ月前の日時を表示する
  21. print('<h3>ターゲットより5ヵ月前</h3>');
  22. print(date('Y/m/d H:i:s', strtotime($targetdate . ' -5 month')));
  23. print('<hr>');
  24. ?>
  25. </body>

○ 実行結果

実行結果
実行結果

○ 解説

 16行目で、date関数の第2引数に2時間後を指定しています。strtotime関数の引数として「+2 hour」とすることで、実行時の時間から2時間後のタイムスタンプが取得できます。それをdate関数に渡すことで、2時間後の日時が取得できます。

 27行目では、strtotime関数の引数として「ターゲット日時 +1 year」という文字列を渡しています。これにより、指定した日時より1年後のタイムスタンプが取得され、それをdate関数に渡すことで指定日時より1年後の日時が取得できます。

 32行目では、指定日時より5か月前の日時を取得しています。

■ DateTimeクラスのmodifyメソッドで計算する

 DateTimeクラスの「modify」メソッドの引数に、加算もしくは減算したい年、月、日、時間、分などを指定して、計算したDateTimeオブジェクトを返します。

クラス名 DateTime
メソッド名 modify
パラメーターリスト
パラメター名 説明
string $modify 日付・時刻を表す文字列
返り値
DateTime DateTimeオブジェクト、失敗した場合はFALSE
modifyメソッドの仕様

 midifyメソッドに引数に、date関数を使った計算でみたように「+1 year」のように指定します。

○ ファイル

 「DateCalcTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 DateTimeCalcTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

DateTimeCalcTest.php

  1. <body>
  2. <?php
  3. //現在の日時を表示する
  4. $date = new DateTime();
  5. print('<h3>現在の日時</h3>');
  6. print($date -> format('Y/m/d H:i:s'));
  7. print('<hr>');
  8. //2時間後の日時を表示する
  9. print('<h3>現在より2時間後</h3>');
  10. print($date -> modify('+2 hour') -> format('Y/m/d H:i:s'));
  11. print('<hr>');
  12. //日付を指定して表示する
  13. $targetdate = new DateTime('2020/12/23 10:11:23');
  14. print('<h3>ターゲットの日時</h3>');
  15. print($targetdate -> format('Y/m/d H:i:s'));
  16. print('<hr>');
  17. //1年後の日時を表示する
  18. print('<h3>ターゲットより1年後</h3>');
  19. print($targetdate -> modify('+1 year') -> format('Y/m/d H:i:s'));
  20. print('<hr>');
  21. //5ヵ月前の日時を表示する
  22. print('<h3>ターゲットより5ヵ月前</h3>');
  23. print($targetdate -> modify('-5 month') -> format('Y/m/d H:i:s'));
  24. print('<hr>');
  25. ?>
  26. </body>

○ 実行結果

実行結果
実行結果

○ 解説

 10行目で、現在の日時を表すDateTimeオブジェクトを生成しています。12行目では画面に表示させるために「format」メソッドを使って日付を整形し、表示しています。

 17行目では、modifyメソッドの引数に「+2 hour」という文字列を渡すことで、現在の日時から2時間後のDateTimeオブジェクトが返ってきます。返ってきたDateTimeオブジェクトのformatメソッドを呼び出して画面に表示しています。

 21行目では、日時を指定してDateTimeオブジェクトを生成しています。28、33行目でそれぞれ1年後、5か月前の設定をしたDateTimeオブジェクトを取得し、表示しています。

前へ   次へ