PHP:PHPで明日、昨日、来月、先月などの日付取得

PHP日付取得して処理をすることはよくあります。

現在の日付を取得するのはdate()関数を使用すればいいのですが、
明日」「昨日」「来月」「先月」などの日付を取得する場合は、
strtotime()関数やmktime()関数を使用します。

忘れてしまうことが多いので、下記にメモします。


PHPで日付取得(明日、昨日、来月、先月)

※出力結果は2014年5月9日の場合

今日の場合

date('Y-m-d');

「出力結果」

2014-05-09

明日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('+1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') + 1, date('Y')));

「出力結果」

2014-05-10

昨日の場合

// strtotime()を使用した場合
date('Y-m-d', strtotime('-1 day'));

// mktime()を使用した場合
date('Y-m-d', mktime(0, 0, 0, date('n'), date('j') - 1, date('Y')));

「出力結果」

2014-05-08

来月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('+1 month'));
date('Y-m', strtotime(date('Y-m-1') . '+1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') + 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') + 1, 1, date('Y')));

「出力結果」

2014-06

先月の場合

// strtotime()を使用した場合
//date('Y-m', strtotime('-1 month'));
date('Y-m', strtotime(date('Y-m-1') . '-1 month'));

// mktime()を使用した場合
//date('Y-m', mktime(0, 0, 0, date('n') - 1, date('j'), date('Y')));
date('Y-m', mktime(0, 0, 0, date('n') - 1, 1, date('Y')));

「出力結果」

2014-04

※来月と先月の月の取得を訂正しました。


strtotime()関数のフォーマット

下記にstrtotime()関数でよく使用するフォーマットをメモします。
※「+1」の数値は取得したい値に変更できます。

フォーマット 内容
now 現在のタイムスタンプを取得
today 今日のタイムスタンプを取得
tomorrow 明日のタイムスタンプを取得
yesterday 昨日のタイムスタンプを取得
+1 day 1日後のタイムスタンプを取得
+1 week 1週間後のタイムスタンプを取得
+1 month 1ヵ月後のタイムスタンプを取得
+1 year 1年後のタイムスタンプを取得
+1 hour 1時間後のタイムスタンプを取得
+1 minute 1分後のタイムスタンプを取得
+1 second 1秒後のタイムスタンプを取得

上記以外にも色々な使い方があります。
フォーマットは複数組み合わせることも可能です。


  • このエントリーをはてなブックマークに追加

PHP:PHPで明日、昨日、来月、先月などの日付取得” への2件のコメント

  1. 来月や先月の日付を取得する strtotime() 使用のコード例についてなのですが、たとえば現在時刻が 1 月 31 日などの場合に意図しない結果となりませんでしょうか?

    1 月 31 日 + 1 month → 2 月 31 日 ( 存在しない日付 ) → 3 月 3 日 または 2 日 ( うるう年の場合 )

    • MorphMorphさん、コメントありがとうございます。
      また、ご指摘いただきありがとうございます。

      来月や先月の日付を取得する場合は、日付によっては意図しない結果となってしまいます。
      記事内容を訂正しました。

      ちなみに来月や先月の場合は日ではなく月を取得する時の例を記載しております。

コメントを残す

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