UPDATE:2019年06月26日
PHP で 時間 を計算する
日時の時間差を計算
php.ini に記述する場合
書式 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()メソッド が理解できるフォーマット文字列
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() が理解できる日付/時刻のフォーマット文字列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php //差を求める日時 $dateTime1 = '2019-06-19 12:50:30'; $dateTime2 = '2019-12-21 23:56:12'; //時分秒の差を返す関数 function time_diff($d1, $d2){ //初期化 $diffTime = array(); //タイムスタンプ $timeStamp1 = strtotime($d1); $timeStamp2 = strtotime($d2); //タイムスタンプの差を計算 $difSeconds = $timeStamp2 - $timeStamp1; //秒の差を取得 $diffTime['seconds'] = $difSeconds % 60; //分の差を取得 $difMinutes = ($difSeconds - ($difSeconds % 60)) / 60; $diffTime['minutes'] = $difMinutes % 60; //時の差を取得 $difHours = ($difMinutes - ($difMinutes % 60)) / 60; $diffTime['hours'] = $difHours; //結果を返す return $diffTime; } //初期化 $diffTimeOutPut = array(); //関数実行 $diffTimeOutPut = time_diff($dateTime1, $dateTime2); //日時の差を表示 echo $diffTimeOutPut['hours'].'時間<br>'; echo $diffTimeOutPut['minutes'].'分<br>'; echo $diffTimeOutPut['seconds'].'秒<br>'; ?> |
5分
42秒
DateTime() で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()メソッド が理解できるフォーマット文字列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | lt;?php //差を求める日時 $dateTime1 = '2019-06-19 12:50:30'; $dateTime2 = '2019-12-21 23:56:12'; //DateTimeクラス $objDatetime1 = new DateTime($dateTime1); $objDatetime2 = new DateTime($dateTime2); //diffメソッド //ふたつの日付の差をあらわす DateInterval オブジェクトを返します。 $objInterval = $objDatetime1->diff($objDatetime2); //%Rは + や - の符号を出力するオプションです echo $objInterval->format('%R%Y').'年<br>'; //年 echo $objInterval->format('%R%M').'月<br>'; //月 echo $objInterval->format('%R%D').'日<br>'; //日 echo $objInterval->format('%R%H').'時<br>'; //時 echo $objInterval->format('%R%I').'分<br>'; //分 echo $objInterval->format('%R%S').'秒<br>'; //秒 ?> |
+06月
+02日
+11時
+05分
+42秒
時間を加算する
現在から時間を加算
date() + strtotime() 現在から時間を加算
現在から +140秒、+210分、+52時間 加算してみます。strtotime()関数 で現在から加算したタイムスタンプを取得し、date()関数 で日時を出力します。
実行日時:2019-01-01 00:00:00
1 | <?php echo date('Y/m/d H:i:s',strtotime("now +140 seconds +210 min +52 hours")); ?> |
※now は省略可能です。
となります。
英文形式フォーマット文字列には様々なフォーマットがあります。興味のある方は以下のページを参照下さい。
- 「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() を使用して、現在から +140秒、+210分、+52時間 加算してみます。mktime()関数 で現在から加算したタイムスタンプを取得し、date()関数 で日時の出力をします。
実行日時:2019-01-01 00:00:00
1 | <?php echo date('Y/m/d H:i:s',mktime(date('H')+52, date('i')+210, date('s')+140, date('m'), date('d'), date('Y'))); ?> |
となります。
DateTimeクラス 現在から時間を加算
DateTimeクラスで、現在から +140秒、+210分、+52時間 加算してみます。DateTimeクラスを呼び出す際に、加算する時間を英文形式で指定します。日時を指定して生成したオブジェクトから format()メソッド で日時を出力します。
実行日時:2019-01-01 00:00:00
1 2 3 4 | <?php $objDateTime = new DateTime('now +140 seconds +210 min +52 hours'); echo $objDateTime->format('Y/m/d H:i:s'); ?> |
※now は省略可能です。
となります。
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() 指定日時から時間を加算
任意の日時から「+140秒、+210分、+52時間」加算します。任意の日時を指定し、さらに、加算する時間の内容を英文形式フォーマットで指定します。
「 UNIXタイムスタンプ = strtotime('日付/時刻フォーマット文字列 英文形式の日付/時刻フォーマット文字列'); 」
の形式で指定します。
指定日時:2020-01-02 03:04:05
1 | <?php echo date('Y/m/d H:i:s',strtotime("2020-01-02 03:04:05 +140 seconds +210 min +52 hours")); ?> |
となります。
例では「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() 指定日時から時間を加算
指定日時:2020-01-02 03:04:05
1 | <?php echo date('Y/m/d H:i:s',mktime(3+52, 4+210, 5+140, 1, 2, 2020)); ?> |
となります。
DateTimeクラス 指定日時から時間を加算
指定日時:2020-01-02 03:04:05
1 2 3 4 | <?php $objDateTime = new DateTime('2020-01-02 03:04:05 +140 seconds +210 min +52 hours'); echo $objDateTime->format('Y/m/d H:i:s'); ?> |
となります。
例では「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() 現在から時間を減算
現在から -140秒、-210分、-52時間 減算してみます。strtotime()関数 で現在から減算したタイムスタンプを取得し、date()関数 で日時を出力します。
実行日時:2019-01-01 00:00:00
1 | <?php echo date('Y/m/d H:i:s',strtotime("now -140 seconds -210 min -52 hours")); ?> |
※now は省略可能です。
となります。
サンプルの英文形式フォーマット文字列は「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() を使用して、現在から -140秒、-210分、-52時間 減算してみます。mktime()関数 で現在から減算したタイムスタンプを取得し、date()関数 で日時の出力をします。
実行日時:2019-01-01 00:00:00
1 | <?php echo date('Y/m/d H:i:s',mktime(date('H')-52, date('i')-210, date('s')-140, date('m'), date('d'), date('Y'))); ?> |
となります。
DateTimeクラス 現在から時間を減算
DateTimeクラスで、現在から -140秒、-210分、-52時間 減算してみます。DateTimeクラスを呼び出す際に、減算する時間を英文形式で指定します。日時を指定して生成したオブジェクトから format()メソッド で日時を出力します。
実行日時:2019-01-01 00:00:00
1 2 3 4 | <?php $objDateTime = new DateTime('now -140 seconds -210 min -52 hours'); echo $objDateTime->format('Y/m/d H:i:s'); ?> |
※now は省略可能です。
となります。
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() 指定日時から時間を減算
任意の日時から「-140秒、-210分、-52時間」減算します。任意の日時を指定し、さらに、減算する時間の内容を英文形式フォーマットで指定します。
「 UNIXタイムスタンプ = strtotime('日付/時刻フォーマット文字列 英文形式の日付/時刻フォーマット文字列'); 」
の形式で指定します。
指定日時:2020-01-02 03:04:05
1 | <?php echo date('Y/m/d H:i:s',strtotime("2020-01-02 03:04:05 -140 seconds -210 min -52 hours")); ?> |
となります。
例では「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() 指定日時から時間を減算
指定日時:2020-01-02 03:04:05
1 | <?php echo date('Y/m/d H:i:s',mktime(3-52, 4-210, 5-140, 1, 2, 2020)); ?> |
となります。
DateTimeクラス 指定日時から時間を減算
指定日時:2020-01-02 03:04:05
1 2 3 4 | <?php $objDateTime = new DateTime('2020-01-02 03:04:05 -140 seconds -210 min -52 hours'); echo $objDateTime->format('Y/m/d H:i:s'); ?> |
となります。
例では「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年06月26日