PHPプログラミング

レシピ

日付・時間の扱い

日付の計算(xx日前、xx週間前、xxヶ月前、月末の日付、年末の日付)

「xx日前の日付」「xxヶ月後の日付」「今年の年末の曜日」など、ある日時を起点とした日付の計算方法を解説します。

この記事のポイント

  • タイムスタンプを使った時刻の計算方法が分かる
  • x時間前、x日後などの時間を計算する
  • 月末の日時を計算する
  • 年末の日時を計算する

目次

便利な日付の計算

「3日後の日付を取得したい」「今月末が何曜日か知りたい」など、日付を扱っていると様々なニーズが発生します。
そこで今回は、strtotime関数を使った非常に便利な日付の計算方法について解説します。

  • 「xx日前」「xx日後」を取得する
  • 「xx週間前」「xx週間後」を取得する
  • 「xxヶ月前」「xxヶ月後」を取得する
  • 次のxx曜日を取得する
  • 月末の日時・曜日を取得する
  • 年末の日時・曜日を取得する

これらは全て、strtotime関数を使って取得することができます。
1つずつ取得するコードを確認していきましょう。

「xx日前」「xx日後」を取得する

「日」の単位でずらした日付を取得したいときは、次のようなコードになります。

コード例

<?php
// 仮に2017年8月1日の日付を基準にするとします
$date = '2017-08-01 16:30:00';

// 1日前の日付を取得
$timestamp = strtotime('-1 day ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-07-31 16:30:00

// 5日前の日付を取得
$timestamp = strtotime('-5 day ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-07-27 16:30:00

// 3日後の日付を取得
$timestamp = strtotime('+3 day ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-04 16:30:00

// 100日後の日付を取得
$timestamp = strtotime('+100 day ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-11-09 16:30:00

strtotime関数は文字列型の日付を渡すとタイムスタンプを取得することができますが、上記のように日付の前に「-1 day」と指定することで、xx日後やxx日前の日付を取得することができます。
出力結果から、「月」や「年」もしっかり切り替わっていることがわかります。

「日」と同じように、「月」であれば「month」、「年」であれば「year」に変えるだけで、それぞれの単位に合わせた日付の移動が可能です。
非常に便利。

エラーにはなりませんが、コードが読みづらくなってしまうため「day」の前後に空白スペースを入れることをオススメします。

「xx週間前」「xx週間後」を取得する

「日」と同様に、次は「週」の単位で計算をしてみます。

コード例

<?php
// 2017年8月1日の日付を基準にする
$date = '2017-08-01 16:30:00';

// 1週間前の日付を取得
$timestamp = strtotime('-1 week ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-07-25 16:30:00

// 4週間前の日付を取得
$timestamp = strtotime('-4 week ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-07-04 16:30:00

// 1週間後の日付を取得
$timestamp = strtotime('+1 week ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-08 16:30:00

// 4週間後の日付を取得
$timestamp = strtotime('+4 week ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-29 16:30:00

「xxヶ月前」「xxヶ月後」を取得する

「月」の単位で計算をしてみます。

コード例

<?php
// 2017年8月1日の日付を基準にする
$date = '2017-08-01 16:30:00';

// 1ヶ月前の日付を取得
$timestamp = strtotime('-1 month ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-07-01 16:30:00

// 5ヶ月前の日付を取得
$timestamp = strtotime('-5 month ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-03-01 16:30:00

// 1ヶ月後の日付を取得
$timestamp = strtotime('+1 month ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-09-01 16:30:00

// 6ヶ月後の日付を取得
$timestamp = strtotime('+6 month ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2018-02-01 16:30:00

同様に、「month」を、「year」に変更すると年単位での計算結果を取得することができます。

次のxx曜日を取得する

続いて、少し変則的ですが「次の日曜日は何日?」といった日付の計算を実行してみます。

コード例

<?php
// 2017年8月1日の日付を基準にする
$date = '2017-08-01 16:30:00';

// 次の「日曜」の日付を取得
$timestamp = strtotime('next sunday ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-06 16:30:00

// 次の「日曜」の日付を取得 ※先頭3文字でも取得可
$timestamp = strtotime('next sun ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-06 16:30:00

// 次の次の「日曜」の日付を取得
$timestamp = strtotime('+2 sun ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-13 16:30:00

月末の日時・曜日を取得する

続いて、月末の日付と曜日を取得してみます。

コード例

<?php
// 2017年8月1日の日付を基準にする
$date = '2017-08-01 16:30:00';

// 今月末を取得
$timestamp = strtotime('last day of ' . $date);
echo date("Y-m-d H:i:s", $timestamp); // 2017-08-31 16:30:00
echo date("l", $timestamp); // Thursday

last day of 」+日付と少し長くなっていますが、この記述でタイムスタンプの月の末日を取得することができます。

年末の日時・曜日を取得する

最後に、年末のタイムスタンプを取得してみます。

年末の日付は必ず「12月31日」となるため、実際に変動するのは「年」のみです。
そのため、年だけを

コード例

<?php
// 2017年8月1日の日付を基準にする
$date = '2017-08-01 16:30:00';

// 年末を取得
$timestamp = strtotime('last day of ' . date("Y-12-31", strtotime($date)));

echo date("Y-m-d H:i:s", $timestamp); // 2017-12-31 00:00:00
echo date("l", $timestamp); // Sunday

strtotime関数の中で、strtotime関数を呼び出しています。
そこでまずタイムスタンプを生成し、date関数で年末の日付を作成しています。
そして、その日付と「last day of」を組み合わせることで、最終的に年末のタイムスタンプを作成しています。

出力された結果から、2017年12月31日は「日曜」であることが分かりました。

以上、strtotime関数を使った日付の計算方法でした。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。