ホーム > PHPサンプル > 日付系 > PHP 日付 を 加算 する
PHPサンプル

UPDATE:2023年08月17日

PHP 日付 を 加算 する

PHP 日付 を 加算 する | wepicks!
PHP4 PHP5 PHP7

PHP で日付を加算する

現在、あるいは、任意(指定日)日付に日数や時間を加算したり減算いたりして、過去や未来など、指定した日付や時間を取得することが出来ます。日付や時間に対して加算/減算などの操作を加えるにはUNIXタイムスタンプを利用します。タイムスタンプに必要な日数や時間を加算/減算することで、要求する日時を取得することが可能です。タイムスタンプは、strtotime()関数mktime()関数 で求めることが出来ます。操作したタイムスタンプを date()関数 の2番目の引数に指定して、年月日や時分秒を取得します。
また、DateTimeクラスは、日時の様々な表現が可能で、日付や時間の加算や減算なども行えます。

タイムゾーンの指定
php.ini に記述する場合
date.timezone = Asia/Tokyo
スクリプトに記述する場合
<?php date_default_timezone_set ('Asia/Tokyo'); ?>
※日本時間に合わせます。タイムゾーンに誤りがあると日付系の関数やクラスでエラーが起こる場合があります。
使用する関数やクラス

書式 date()
日時の文字列 = date('日付/時刻フォーマット文字列' [,UNIXタイムスタンプ]);
//[ ]省略可(タイムスタンプがない場合現在日時となる)
//返り値は文字列(string)
date() が理解できる日付/時刻フォーマット文字列

書式 strtotime()
指定日時のUNIXタイムスタンプ = strtotime('英文形式 OR 日付/時刻 フォーマット文字列');
//返り値は数値(int)、失敗時は FALSE を返す
strtotime() が理解できる英文形式フォーマット文字列
strtotime() が理解できる日付/時刻のフォーマット文字列

書式 mktime()
指定日時のUNIXタイムスタンプ = mktime(時, 分, 秒, 月, 日, 年);
//返り値は数値(int)、失敗時は FALSE を返す

書式 DateTimeクラス
オブジェクト = new DateTime(['英文形式 OR 日付/時刻のフォーマット文字列']);
//[ ]は省略可能です。
DateTimeクラス が理解できる英文形式フォーマット文字列
DateTimeクラス が理解できる日付/時刻のフォーマット文字列
DateTime format()メソッド が理解できるフォーマット文字列

サンプル

※UNIXタイムスタンプは、1970年1月1日00時00分00秒UTC(協定世界時と一致する標準時)らの経過秒数です。例えば2019年5月15日1時34分25秒のUNIXタイムスタンプは 1557851665 となります。


現在の日時から日付や時間を加算する

date() + strtotime() で現在の日時から日付や時間を加算する

strtotime() を使用して現在のUNIXタイムスタンプに必要な日数や時間を加算し、date() + strtotime() で必要な日付を取得します。

date()関数strtotime()関数 を組み合わせることで、現在の日付や時間を加算/減算できます。

date()関数 は、指定した「日付や時刻のフォーマット文字列」から、現在や任意の日付や時間の「文字列」を返します「 日時の文字列 = date('日付/時刻のフォーマット文字列'); 」。オプションでUNIXタイムスタンプを指定すると、指定したタイムスタンプに合わせた日時の文字列を返します「 日時の文字列 = date('日付/時刻のフォーマット文字列', UNIXタイムスタンプ); 」。タイムスタンプを省略すると現在日時となります。
date() が理解できる日付/時刻フォーマット文字列

タイムスタンプは、strtotime() で取得できます。strtotime()関数 は、「英文形式で指定された日付や時刻のフォーマット文字列」、または、「日付/時刻のフォーマット文字列」を読み込み、結果をUNIXタイムスタンプの数値として返します。
UNIXタイムスタンプ = strtotime('英文形式の日付/時刻フォーマット文字列');
UNIXタイムスタンプ = strtotime('日付/時刻フォーマット文字列');
strtotime() に指定する最も一般的な日時の書式は strtotime('2019-01-02 03:04:05'); というような形です。その他にも様々なフォーマットがあります。興味のある方は以下のページを参照下さい。
strtotime() が理解できる英文形式フォーマット文字列
strtotime() が理解できる日付/時刻のフォーマット文字列

現在から1日後の日付を取得 date() + strtotime()

"+1 day"

実行日時:2019-01-01 00:00:00

結果は

1日後のタイムスタンプ:1546354800
日時に変換:2019/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

サンプルでは「+1 day」という形の英文形式フォーマットでしたが、その他にも様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「now(今)」
  • 「today(本日)」
  • 「tommorw(明日)」
  • 「yesterday(昨日)」
  • 「+1 day(1日後 -符号もOK)」
  • 「+1 week(1週間後 -符号もOK)」
  • 「+1 month(1カ月後 -符号もOK)」
  • 「+1 year(1年後 -符号もOK)」
  • 「+1 seconds(1秒後 -符号もOK)」
  • 「+1 min(1分後 -符号もOK)」
  • 「+1 hours(1時間後 -符号もOK)」

さらに詳細を知りたい方
strtotime() が理解できる英文形式フォーマット文字列

現在から1週間後の日付を取得 date() + strtotime()

"+1 week"

実行日時:2019-01-01 00:00:00

結果は

1週間後のタイムスタンプ:1546873200
日時に変換:2019/01/08 00:00:00

となります。
-1 とすれば、1週間前 となる。

現在から1カ月後の日付を取得 date() + strtotime()

"+1 month"

実行日時:2019-01-01 00:00:00

結果は

1カ月後のタイムスタンプ:1548946800
日時に変換:2019/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 strtotime()

"+1 seconds +2 min +3 hours +4 day +5 month +6 year"

実行日時:2019-01-01 00:00:00

結果は

+1秒、+2分、+3時間、+4日、+5カ月、+6年 後のタイムスタンプ:1749060121
日時に変換:2025/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

現在から次の木曜日の日付を取得 strtotime()

"next Thursday"

実行日時:2019-01-01 00:00:00

結果は

次の木曜日のタイムスタンプ:1546441200
日時に変換:2019/01/03 00:00:00

となります。
last Thursday とすれば、前の木曜日 となる。

date() + mktime() で現在の日時から日付や時間を加算する

mktime() を使用して現在のUNIXタイムスタンプに必要な日数を加算し、date() + mktime() で必要な日付を取得します。

date()関数 は、指定した日付や時刻のフォーマット文字列から、現在や任意の日付や時間の文字列を返します「 日時の文字列 = date('日付/時刻のフォーマット文字列'); 」。オプションでUNIXタイムスタンプを指定すると指定したタイムスタンプに合わせた日時の文字列を返します「 日時の文字列 = date('日付/時刻のフォーマット文字列', UNIXタイムスタンプ); 」。タイムスタンプを省略すると現在日時となります。
date() が理解できる日付/時刻フォーマット文字列

mktime()関数 は、指定した日時のUNIXタイムスタンプの数値を返します。時、分、秒、月、日、年 と日時の内容を指定します。書式は、mktime(時, 分, 秒, 月, 日, 年) となります。

現在から1日後の日付を取得 date() + mktime()

mktime(date('H'), date('i'), date('s'), date('m'), date('d')+1, date('Y'))

実行日時:2019-01-01 00:00:00

結果は

1日後のタイムスタンプ:1546354800
日時に変換:2019/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

現在から1週間後の日付を取得 date() + mktime()

mktime(date('H'), date('i'), date('s'), date('m'), date('d')+7, date('Y'))

実行日時:2019-01-01 00:00:00

結果は

1週間後のタイムスタンプ:1546873200
日時に変換:2019/01/08 00:00:00

となります。
-7 とすれば、1週間前 となる。

現在から1カ月後の日付を取得 date() + mktime()

mktime(date('H'), date('i'), date('s'), date('m')+1, date('d'), date('Y'))

実行日時:2019-01-01 00:00:00

結果は

1カ月後のタイムスタンプ:1548946800
日時に変換:2019/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 date() + mktime()

mktime(date('H')+x, date('i')+x, date('s')+x, date('m')+x, date('d')+x, date('Y')+x)

実行日時:2019-01-01 00:00:00

結果は

+1秒、+2分、+3時間、+4日、+5カ月、+6年のタイムスタンプ:1749060121
日時に変換:2025/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

DateTimeクラス で現在の日時から日付や時間を加算する

DateTimeクラスに指定する日付に英文形式フォーマット文字列で日数を加算し、必要な日付を取得します。

DateTimeクラスは様々な日付や時刻を表現できるクラスです。DateTimeクラスを呼び出しオブジェクト(インスタンス)を作成します「 オブジェクト = new DateTime(); 」。DateTimeクラスを呼び出す際に日付や時刻を指定することも出来ます。日付を指定する際、英文形式フォーマット文字列で必要な日数を加算することが出来ます。
オブジェクト = new DateTime('英文形式のフォーマット文字列'); 」。
日付や時刻の指定は日時の文字列でも可能です。例えば、DateTime('2019-01-02 03:04:05'); というような形です。
オブジェクト = new DateTime('日付/時刻のフォーマット文字列'); 」。
日時の指定を省略した場合は現在の日時になります。日時の指定には様々なフォーマットがありますので、興味のある方は以下のページを参照下さい。
DateTimeクラス が理解できる英文形式フォーマット文字列
DateTimeクラス が理解できる日付/時刻のフォーマット文字列

DateTimeクラスのformat()メソッドは、指定した日付や時刻のフォーマット文字列から日時の文字列を返します「 日時の文字列 = オブジェクト->format('日付/時刻のフォーマット文字列'); 」。成功すると日時の文字列を返し、失敗すると FALSE を返します。format()メソッドで指定する日時のフォーマット文字列はdate()関数で指定するフォーマットと同じです。
DateTime format()メソッド が理解できるフォーマット文字列

現在から1日後の日付を取得 DateTimeクラス

"+1 day"

実行日時:2019-01-01 00:00:00

結果は

現在から1日後の日付:2019/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

サンプルでは「+1 day」という形の英文形式フォーマットでしたが、その他にも様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「now(今)」
  • 「today(本日)」
  • 「tommorw(明日)」
  • 「yesterday(昨日)」
  • 「+1 day(1日後 -符号もOK)」
  • 「+1 week(1週間後 -符号もOK)」
  • 「+1 month(1カ月後 -符号もOK)」
  • 「+1 year(1年後 -符号もOK)」
  • 「+1 seconds(1秒後 -符号もOK)」
  • 「+1 min(1分後 -符号もOK)」
  • 「+1 hours(1時間後 -符号もOK)」

さらに詳細を知りたい方
DateTimeクラス が理解できる英文形式フォーマット文字列

現在から1週間後の日付を取得 DateTimeクラス

"+1 week"

実行日時:2019-01-01 00:00:00

結果は

現在から1週間後の日付:2019/01/08 00:00:00

となります。
-1 とすれば、1週間前 となる。

現在から1カ月後の日付を取得 DateTimeクラス

"+1 month"

実行日時:2019-01-01 00:00:00

結果は

現在から1カ月後の日付:2019/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 DateTimeクラス

"+1 seconds +2 min +3 hours +4 day +5 month +6 year"

実行日時:2019-01-01 00:00:00

結果は

現在から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付:2025/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

現在から次の木曜日の日付を取得 DateTimeクラス

"next Thursday"

実行日時:2019-01-01 00:00:00

結果は

次の木曜日の日付:2019/01/03 00:00:00

となります。
last Thursday とすれば、前の木曜日 となる。

任意の日時から日付や時間を加算する

date() + strtotime() で任意の日時から日付や時間を加算する

strtotime() を使用して任意の日付のUNIXタイムスタンプを取得し、日付を加算して取得します。

任意の日付から1日後の日付を取得 date() + strtotime()

2020-01-01 00:00:00 から1日後の日付を取得。

結果は

1日後のタイムスタンプ:1577890800
日時に変換:2020/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

任意の日付から1週間後の日付を取得 date() + strtotime()

2020-01-01 00:00:00 から1週間後の日付を取得。

結果は

1週間後のタイムスタンプ:1578409200
日時に変換:2020/01/08 00:00:00

となります。
-1 とすれば、1週間前 となる。

任意の日付から1カ月後の日付を取得 date() + strtotime()

2020-01-01 00:00:00 から1カ月後の日付を取得。

結果は

1カ月後のタイムスタンプ:1580482800
日時に変換:2020/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

任意の日付から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 date() + strtotime()

2020-01-01 00:00:00 から+1秒、+2分、+3時間、+4日、+5カ月、+6年後の日付を取得。

結果は

+1秒、+2分、+3時間、+4日、+5カ月、+6年 後のタイムスタンプ:1780596121
日時に変換:2026/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

任意の日付から次の木曜日の日付を取得 date() + strtotime()

2020-01-01 00:00:00 から次の木曜日の日付を取得。

結果は

次の木曜日のタイムスタンプ:1577890800
日時に変換:2020/01/02 00:00:00

となります。
last Thursday とすれば、前の木曜日 となる。

date() + mktime() で任意の日時から日付や時間を加算する

mktime()を使用して指定日時のUNIXタイムスタンプを取得し、タイムスタンプから日付を取得します。

任意の日付から1日後の日付を取得 date() + mktime()

2020-01-01 00:00:00 から1日後の日付を取得。

結果は

1日後のタイムスタンプ:1577890800
日時に変換:2020/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

任意の日付から1週間後の日付を取得 date() + mktime()

2020-01-01 00:00:00 から1週間後の日付を取得。

結果は

1週間後のタイムスタンプ:1578409200
日時に変換:2020/01/08 00:00:00

となります。
-7 とすれば、1週間前 となる。

任意の日付から1カ月後の日付を取得 date() + mktime()

2020-01-01 00:00:00 から1カ月後の日付を取得。

結果は

1カ月後のタイムスタンプ:1580482800
日時に変換:2020/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

任意の日付から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 date() + mktime()

2020-01-01 00:00:00 から+1秒、+2分、+3時間、+4日、+5カ月、+6年の日付を取得。

結果は

+1秒、+2分、+3時間、+4日、+5カ月、+6年 後のタイムスタンプ:1780596121
日時に変換:2026/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

DateTimeクラス で任意の日時から日付や時間を加算する

DateTimeクラスに指定する日付を「日付/時刻フォーマット文字列 + 英文形式フォーマット文字列」の形式で指定することで、任意の日付から日数を加算し、必要な日付を取得します。

任意の日付から1日後の日付を取得 DateTimeクラス

"日付/時刻フォーマット文字列 +1 day"

指定日:2020-01-01 00:00:00

結果は

2020-01-01 00:00:00 から1日後の日付:2020/01/02 00:00:00

となります。
-1 とすれば、1日前 となる。

例では「2020-01-01 00:00:00」という形式の日付/時刻のフォーマット文字列ですが、DateTimeクラスは以下のような日付フォーマットも扱えます。

  • 「02-01-2020(日-月-年)」
  • 「02.01.2020(日.月.年)」
  • 「01/02/20(月/日/年)」
  • 「20-01-02(年-月-日)」
  • 「01/02/2020(月/日/年)」
  • 「Jan. 02, 2020(3文字英語月. 日, 年)」
  • 「02 Jan 2020(日 3文字英語月 年)」

さらに詳細を知りたい方
DateTimeクラス が理解できる日付/時刻のフォーマット文字列

任意の日付から1週間後の日付を取得 DateTimeクラス

"日付/時刻フォーマット文字列 +1 week"

指定日:2020-01-01 00:00:00

結果は

2020-01-01 00:00:00 から1週間後の日付:2020/01/08 00:00:00

となります。
-1 とすれば、1週間前 となる。

任意の日付から1カ月後の日付を取得 DateTimeクラス

"日付/時刻フォーマット文字列 +1 month"

指定日:2020-01-01 00:00:00

結果は

2020-01-01 00:00:00 から1カ月後の日付:2020/02/01 00:00:00

となります。
-1 とすれば、1カ月前 となる。

任意の日付から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付を取得 DateTimeクラス

"日付/時刻フォーマット文字列 +1 seconds +2 min +3 hours +4 day +5 month +6 year"

指定日:2020-01-01 00:00:00

結果は

2020-01-01 00:00:00 から+1秒、+2分、+3時間、+4日、+5カ月、+6年 後の日付:2026/06/05 03:02:01

となります。
マイナス – とすれば、1秒、2分、3時間、4日、5カ月、6年 前 となる。

任意の日付から次の木曜日の日付を取得 DateTimeクラス

"日付/時刻フォーマット文字列 next Thursday"

指定日:2020-01-01 00:00:00

結果は

2020-01-01 00:00:00 から次の木曜日の日付:2020/01/02 00:00:00

となります。
last Thursday とすれば、前の木曜日 となる。


タグ(=記事関連ワード)

タグ: , ,

日付

投稿日:2017年12月4日
最終更新日:2023年08月17日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpsample-date-targetdayvar/trackback/

page top