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

UPDATE:2019年06月05日

PHP で 時間 を計算する

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

PHP4 PHP5 PHP7

日時の差を計算

2つの日時から時間差を求めます。例えば、「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(英文形式の日時);
//返り値は数値(int)、失敗時は FALSE を返す
strtotime() 英文形式フォーマット

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

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

書式 DateTimeクラス
インスタンス = new DateTime([日時]);
//[ ]は省略可能です。
DateTime() フォーマット

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


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

strtotime()関数を使用して2つの日時の時間差を計算します。何時間、何分、何秒で差を出力します。
差の日数も取得する場合は、こちらを参照下さい。

実行結果
4451時間
5分
42秒

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

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

DateTimeクラスで2つの日時の差を計算します。何年、何カ月、何日、何時間、何分、何秒で差が出力されます。

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

時間を加算する

strtotime()で加算

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

※now は省略可能です。

現在日時が、2019-01-01 00:00:00 だった場合の結果です。

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

となります。

mktime()で加算

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

現在日時が、2019-01-01 00:00:00 だった場合の結果です。

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

となります。

時間を減算する

strtotime()で減算

現在から-140秒、-210分、-52時間 減算してみます。加算の場合は + の符号ですが、 – 符号にすれば減算できます。

※now は省略可能です。

現在日時が、2019-01-01 00:00:00 だった場合の結果です。

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

となります。

mktime()で減算

同じように mktime() で減算してみましょう。加算の場合は + の符号ですが、 – 符号にすれば減算できます。

現在日時が、2019-01-01 00:00:00 だった場合の結果です。

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

となります。

strtotime() 英文形式フォーマット

strtotime() 英文形式フォーマット

英文形式フォーマットで指定した日時のUNIXタイムスタンプを取得します。
※UNIXタイムスタンプは、1970年1月1日00時00分00秒UTC(協定世界時と一致する標準時)らの経過秒数です。例えば2019年5月15日1時34分25秒のUNIXタイムスタンプは 1557851665 となります。
戻り値の例やサンプルの結果は 2019-01-01 00:00:00 に実行した場合
取得内容フォーマット文字内容戻り値の例
今現在now今現在のUNIXタイムスタンプ1546268400
<?php echo strtotime("now");//1546268400 ?>
<?php echo date('Y-m-d H:i:s', strtotime('now'));//2019-01-01 00:00:00 ?>
本日today本日のUNIXタイムスタンプ1546268400
<?php echo strtotime("today");//1546268400 ?>
<?php echo date('Y-m-d', strtotime('today'));//2019-01-01 ?>
昨日yesterday昨日のUNIXタイムスタンプ1546182000
<?php echo strtotime("yesterday");//1546182000 ?>
<?php echo date('Y-m-d', strtotime('yesterday'));//2018-12-31 ?>
明日tomorrow明日のUNIXタイムスタンプ1546354800
<?php echo strtotime("tomorrow");//1546354800 ?>
<?php echo date('Y-m-d', strtotime('tomorrow'));//2019-01-02 ?>
今週this week今週の月曜日のUNIXタイムスタンプ1546182000
<?php echo strtotime("this week");//1546182000 ?>
<?php echo date('Y-m-d', strtotime('this week'));//2018-12-31 ?>
先週last week先週の月曜日のUNIXタイムスタンプ1545577200
<?php echo strtotime("last week");//1545577200 ?>
<?php echo date('Y-m-d', strtotime('last week'));//2018-12-24 ?>
来週next week来週の月曜日のUNIXタイムスタンプ1546786800
<?php echo strtotime("next week");//1546786800 ?>
<?php echo date('Y-m-d', strtotime('next week'));//2019-01-07 ?>
今月this month今月の同日のUNIXタイムスタンプ1546268400
<?php echo strtotime("this month");//1546268400 ?>
<?php echo date('Y-m-d', strtotime('this month'));//2019-01-01 ?>
先月last month先月の同日のUNIXタイムスタンプ1543590000
<?php echo strtotime("last month");//1543590000 ?>
<?php echo date('Y-m-d', strtotime('last month'));//2018-12-01 ?>
来月next month来月の同日のUNIXタイムスタンプ1548946800
<?php echo strtotime("next month");//1548946800 ?>
<?php echo date('Y-m-d', strtotime('next month'));//2019-02-01 ?>
今年this year今年の同日のUNIXタイムスタンプ1546268400
<?php echo strtotime("this year");//1546268400 ?>
<?php echo date('Y-m-d', strtotime('this year'));//2019-01-01 ?>
去年last year去年の同日のUNIXタイムスタンプ1514732400
<?php echo strtotime("last year");//1514732400 ?>
<?php echo date('Y-m-d', strtotime('last year'));//2018-01-01 ?>
来年next year来年の同日のUNIXタイムスタンプ1577804400
<?php echo strtotime("next year");//1577804400 ?>
<?php echo date('Y-m-d', strtotime('next year'));//2020-01-01 ?>
指定日付1 January 2019指定日付のUNIXタイムスタンプ1546268400
<?php echo strtotime("1 January 2019");//1546268400 ?>
<?php echo date('Y-m-d', strtotime("1 January 2019"));//2019-01-01 ?>
指定日時2019-01-02 03:04:05指定日時のUNIXタイムスタンプ1546365845
<?php strtotime('2019-01-02 03:04:05');//1546365845 ?>
<?php date('Y-m-d H:i:s', strtotime('2019-01-02 03:04:05'));//2019-01-02 03:04:05 ?>
本日から 年 月 日 週 を加算 (+ 省略可/- も可)+1 day +1 week +1 month +1 year年 月 日 週 の + - 指定のUNIXタイムスタンプ1581174000
<?php echo strtotime("+1 day +1 week +1 month +1 year");//1581174000 ?>
<?php echo date('Y-m-d', strtotime('+1 day +1 week +1 month +1 year'));//2020-02-09 ?>
今から+1時間1分1秒 (+ 省略可/- も可)+1 hours +1 min +1 seconds時、分、秒 の + - 指定のUNIXタイムスタンプ1546272061
<?php echo strtotime("+1 hours +1 min +1 seconds");//1546272061 ?>
<?php echo date('Y-m-d H:i:s', strtotime('+1 hours +1 min +1 seconds'));//2019-01-01 01:01:01 ?>
次の木曜日Thursday
next Thursday
次の木曜日のUNIXタイムスタンプ1546441200
<?php echo strtotime("Thursday");//1546441200 ?>
<?php date('Y-m-d', strtotime("Thursday"));//2019-01-03 ?>
前の木曜日last Thursday前の木曜日のUNIXタイムスタンプ1545836400
<?php echo strtotime("last Thursday");//1545836400 ?>
<?php date('Y-m-d', strtotime("last Thursday"));//2018-12-27 ?>
月の最初の日first day of this month指定月の最初の日のUNIXタイムスタンプ1546268400
<?php echo strtotime("first day of this month");//1546268400 ?>
<?php echo date('Y-m-d', strtotime("first day of this month"));//2019-01-01 ?>
月の最後の日last day of this month指定月の最後の日のUNIXタイムスタンプ1548860400
<?php echo strtotime("last day of this month");//1548860400 ?>
<?php echo date('Y-m-d', strtotime("last day of this month"));//2019-01-31 ?>
指定日から + -2020-01-01 00:00:00 +1 seconds +1 min +1 hours +1 day +1 week +1 month +1 year指定日から + - したUNIXタイムスタンプ1612800061
<?php
$format = '2020-01-01 00:00:00 +1 seconds +1 min +1 hours +1 day +1 week +1 month +1 year';
echo strtotime($format);//1612800061
echo date('Y-m-d H:i:s', strtotime($format));//2021-02-09 01:01:01
?>

DateTime()クラス フォーマット

DateTimeクラス format()メソッド フォーマット

取得内容フォーマット文字説明戻り値の例
Y年 4 桁の数字1999 や 2019
y年 2 桁の数字99 や 19
L閏年かどうか。1なら閏年。0なら閏年ではない。1 か 0
$objDateTime = new DateTime();
echo $objDateTime->format('Y');//2019
echo $objDateTime->format('y');//19
echo $objDateTime->format('L');//0
F月 フルスペルの文字January~December
m月 数字。先頭にゼロをつける01~12
M月 3 文字形式Jan~Dec
n月 数字。先頭にゼロをつけない1~12
t月 指定した月の日数28~31
$objDateTime = new DateTime();
echo $objDateTime->format('F');//May
echo $objDateTime->format('m');//05
echo $objDateTime->format('M');//May
echo $objDateTime->format('n');//5
echo $objDateTime->format('t');//31
d日 2桁の数字(先頭にゼロがつく場合も)01~31
j日 数字。先頭にゼロをつけない1~31
$objDateTime = new DateTime();
echo $objDateTime->format('d');//07
echo $objDateTime->format('j');//7
曜日D3文字のテキスト形式Mon~Sun
lフルスペル形式Sunday~Saturday
N数字1(月曜) から 7(日曜)
w数字0(日曜) から 6(土曜)
W数字月曜日に始まる年単位の週番号
$objDateTime = new DateTime();
echo $objDateTime->format('D');//Wed
echo $objDateTime->format('l');//Wednesday
echo $objDateTime->format('N');//3
echo $objDateTime->format('w');//3
echo $objDateTime->format('W');//21
g12時間単位。先頭ゼロなし1~12
G24時間単位。先頭ゼロなし0~23
h12時間単位。先頭ゼロあり01~12
H24時間単位。先頭ゼロあり00~23
a午前/午後。小文字表示am pm
A午前/午後。大文字表示AM PM
$objDateTime = new DateTime();
echo $objDateTime->format('g');//12
echo $objDateTime->format('G');//0
echo $objDateTime->format('h');//12
echo $objDateTime->format('H');//00
echo $objDateTime->format('a');//pm
echo $objDateTime->format('A');//PM
i先頭ゼロあり00~59
$objDateTime = new DateTime();
echo $objDateTime->format('i');//59
s先頭ゼロあり00~59
$objDateTime = new DateTime();
echo $objDateTime->format('s');//01
ミリ秒vミリ秒654
$objDateTime = new DateTime();
echo $objDateTime->format('v');//000
マイクロ秒uマイクロ秒654321
$objDateTime = new DateTime();
echo $objDateTime->format('u');//000000
全日付cISO8601 フォーマット日付2019-05-15T01:04:54+09:00
rRFC2822 フォーマット日付Wed, 15 May 2019 01:04:54 +0900
$objDateTime = new DateTime();
echo $objDateTime->format('c');//2019-05-15T01:04:54+09:00
echo $objDateTime->format('r');//Wed, 15 May 2019 01:04:54 +0900
タイムゾーンオフセット秒数ZUTC(世界協定時間=グリニッジ天文台が有る場所東経0度の場所を基準にして決められている時間)の西側のタイムゾーン用のオフセット秒数は常に負になります。UTCの東側のオフセット秒数は常に正になります。 日本は32400なので、+9時間です。-43200 ~ 50400
$objDateTime = new DateTime();
echo $objDateTime->format('Z');//32400
UNIX時間からの秒数UUnix Epoch(エポック秒(UNIX時間))=1970年1月1日0時0分0秒からの秒数1557850516
$objDateTime = new DateTime();
echo $objDateTime->format('U');//1557850516

定義済み定数

以下の定数はフォーマットされた日付の文字列です。
<?php
echo DateTime::ATOM;//Y-m-d\TH:i:sP
echo '<br/>';
echo DateTime::COOKIE;//l, d-M-Y H:i:s T
echo '<br/>';
echo DateTime::ISO8601;//Y-m-d\TH:i:sO
echo '<br/>';
echo DateTime::RFC822;//D, d M y H:i:s O
echo '<br/>';
echo DateTime::RFC850;//l, d-M-y H:i:s T
echo '<br/>';
echo DateTime::RFC1036;//D, d M y H:i:s O
echo '<br/>';
echo DateTime::RFC1123;//D, d M Y H:i:s O
echo '<br/>';
echo DateTime::RFC2822;//D, d M Y H:i:s O
echo '<br/>';
echo DateTime::RFC3339;//Y-m-d\TH:i:sP
echo '<br/>';
echo DateTime::RSS;//D, d M Y H:i:s O
echo '<br/>';
echo DateTime::W3C;//Y-m-d\TH:i:sP
echo '<br/>';
?>
結果は
Y-m-d\TH:i:sP
l, d-M-Y H:i:s T
Y-m-d\TH:i:sO
D, d M y H:i:s O
l, d-M-y H:i:s T
D, d M y H:i:s O
D, d M Y H:i:s O
D, d M Y H:i:s O
Y-m-d\TH:i:sP
D, d M Y H:i:s O
Y-m-d\TH:i:sP
となります。


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

タグ: , ,

日付

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

関連記事

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

この記事へのコメント

トラックバックurl

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

page top