menu
ホーム > PHPサンプル > 日付系 > PHP で 時間 を計算する
PHPサンプル

UPDATE:2019年06月26日

PHP で 時間 を計算する

PHP で 時間 を計算する | wepicks!
PHP4 PHP5 PHP7

日時の時間差を計算

時間を求めたり、時間を加算減算するなど、PHP で時間を 計算 するには、UNIXタイムスタンプの値を操作することで求めることが出来ます。タイムスタンプは、strtotime()関数mktime()関数 などで求めることが可能で、また、DateTimeクラスを利用すれば、様々な時間の操作や表現が可能です。例えば、「2019-06-19 12:50:30」と「2019-12-21 23:56:12」の間には、4451時間/5分/42秒の時間差があります。このような時間差を strtotime()DateTime() を使用して求めます。日数の差を求める場合はこちらをお読みください

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

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

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

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

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

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


2つの日時の時間差を計算(時間、分、秒)

strtotime() で時間差を計算

2つの日時の時間差を計算するには、2つの日時をUNIXタイムスタンプに変換し、タイムスタンプの時間差から算出する方法があります。タイムスタンプはstrtotime()関数 で求めることが出来ます。strtotime() を使用して2つの日時の時間差を計算します。何時間、何分、何秒で差を出力します。

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

実行結果
4451時間
5分
42秒

4451時間を日数と時間に分ける場合はこちらを参照下さい。

DateTime() で2つの日時の差を計算

DateTimeクラスで2つの日時の差を計算します。DateTimeクラスのdiff()メソッドで、2つの日付の差を出力できます「 日付差のオブジェクト = 日付1オブジェクト->diff(日付2オブジェクト); 」。何年、何カ月、何日、何時間、何分、何秒 で差が出力されます。

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()メソッド が理解できるフォーマット文字列

実行結果
+00年
+06月
+02日
+11時
+05分
+42秒

時間を加算する

現在から時間を加算

date() + strtotime() 現在から時間を加算

strtotime("now +140 seconds +210 min +52 hours")

現在から +140秒、+210分、+52時間 加算してみます。strtotime()関数 で現在から加算したタイムスタンプを取得し、date()関数 で日時を出力します。

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

※now は省略可能です。

実行結果
2019/01/03 07:32:20

となります。

英文形式フォーマット文字列には様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「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() が理解できる英文形式フォーマット文字列

date() + mktime() 現在から時間を加算

mktime(date('H')+52, date('i')+210, date('s')+140, date('m'), date('d'), date('Y'))

同様に mktime() を使用して、現在から +140秒、+210分、+52時間 加算してみます。mktime()関数 で現在から加算したタイムスタンプを取得し、date()関数 で日時の出力をします。
実行日時:2019-01-01 00:00:00

実行結果
2019/01/03 07:32:20

となります。

DateTimeクラス 現在から時間を加算

strtotime("now +140 seconds +210 min +52 hours")

DateTimeクラスで、現在から +140秒、+210分、+52時間 加算してみます。DateTimeクラスを呼び出す際に、加算する時間を英文形式で指定します。日時を指定して生成したオブジェクトから format()メソッド で日時を出力します。

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

※now は省略可能です。

実行結果
2019/01/03 07:32:20

となります。

DateTimeクラスに指定する英文形式フォーマット文字列にも、様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「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クラス が理解できる英文形式フォーマット文字列

指定日時から時間を加算

date() + strtotime() 指定日時から時間を加算

strtotime("2020-01-02 03:04:05 +140 seconds +210 min +52 hours")

任意の日時から「+140秒、+210分、+52時間」加算します。任意の日時を指定し、さらに、加算する時間の内容を英文形式フォーマットで指定します。
UNIXタイムスタンプ = strtotime('日付/時刻フォーマット文字列 英文形式の日付/時刻フォーマット文字列');
の形式で指定します。

指定日時:2020-01-02 03:04:05

実行結果
2020/01/04 10:36:25

となります。

例では「2020-01-02 03:04:05」形式の日付/時刻フォーマットですが、strtotime()は以下のようなフォーマットも扱えます。

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

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

date() + mktime() 指定日時から時間を加算

mktime(3+52, 4+210, 5+140, 1, 2, 2020)

指定日時:2020-01-02 03:04:05

実行結果
2020/01/04 10:36:25

となります。

DateTimeクラス 指定日時から時間を加算

DateTime("2020-01-02 03:04:05 +140 seconds +210 min +52 hours")

指定日時:2020-01-02 03:04:05

実行結果
2020/01/04 10:36:25

となります。

例では「2020-01-02 03:04:05」形式の日付/時刻フォーマットですが、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クラス が理解できる日付/時刻のフォーマット文字列

時間を減算する

現在から時間を減算

date() + strtotime() 現在から時間を減算

strtotime("now -140 seconds -210 min -52 hours")

現在から -140秒、-210分、-52時間 減算してみます。strtotime()関数 で現在から減算したタイムスタンプを取得し、date()関数 で日時を出力します。

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

※now は省略可能です。

実行結果
2018/12/29 16:27:40

となります。

サンプルの英文形式フォーマット文字列は「now -140 seconds -210 min -52 hours」という形式ですが、その他にも様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「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() が理解できる英文形式フォーマット文字列

date() + mktime() 現在から時間を減算

mktime(date('H')-52, date('i')-210, date('s')-140, date('m'), date('d'), date('Y'))

同様に mktime() を使用して、現在から -140秒、-210分、-52時間 減算してみます。mktime()関数 で現在から減算したタイムスタンプを取得し、date()関数 で日時の出力をします。
実行日時:2019-01-01 00:00:00

実行結果
2018/12/29 16:27:40

となります。

DateTimeクラス 現在から時間を減算

strtotime("now -140 seconds -210 min -52 hours")

DateTimeクラスで、現在から -140秒、-210分、-52時間 減算してみます。DateTimeクラスを呼び出す際に、減算する時間を英文形式で指定します。日時を指定して生成したオブジェクトから format()メソッド で日時を出力します。

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

※now は省略可能です。

実行結果
2018/12/29 16:27:40

となります。

DateTimeクラスに指定する英文形式フォーマット文字列にも、様々なフォーマットがあります。興味のある方は以下のページを参照下さい。

  • 「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クラス が理解できる英文形式フォーマット文字列

指定日時から時間を減算

date() + strtotime() 指定日時から時間を減算

strtotime("2020-01-02 03:04:05 -140 seconds -210 min -52 hours")

任意の日時から「-140秒、-210分、-52時間」減算します。任意の日時を指定し、さらに、減算する時間の内容を英文形式フォーマットで指定します。
UNIXタイムスタンプ = strtotime('日付/時刻フォーマット文字列 英文形式の日付/時刻フォーマット文字列');
の形式で指定します。

指定日時:2020-01-02 03:04:05

実行結果
2019/12/30 19:31:45

となります。

例では「2020-01-02 03:04:05」形式の日付/時刻フォーマットですが、strtotime()は以下のようなフォーマットも扱えます。

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

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

date() + mktime() 指定日時から時間を減算

mktime(3-52, 4-210, 5-140, 1, 2, 2020)

指定日時:2020-01-02 03:04:05

実行結果
2019/12/30 19:31:45

となります。

DateTimeクラス 指定日時から時間を減算

DateTime("2020-01-02 03:04:05 -140 seconds -210 min -52 hours")

指定日時:2020-01-02 03:04:05

実行結果
2019/12/30 19:31:45

となります。

例では「2020-01-02 03:04:05」形式の日付/時刻フォーマットですが、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クラス が理解できる日付/時刻のフォーマット文字列


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

タグ: , ,

日付

投稿日:2019年5月29日
最終更新日:2019年06月26日

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

menu-page

この記事へのコメント

トラックバックurl

https://wepicks.net/phpsample-date-2daytimedif/trackback/

page top