PHPプログラミング

最終更新日:
公開日:

レシピ

日付・時刻

2つの時刻の差分を計算する

タイムスタンプを使って2つ以上の時刻の差分を計算する方法について解説します。

この記事のポイント

  • タイムスタンプは「1970年1月1日 00:00:00」から経過した秒数
  • 新しい時刻から古い時刻を引く形で時間の差を計算する

目次

タイムスタンプを使って日時の差分を計算する

タイムスタンプは「1970-1-1 00:00:00」を起点として経過した秒数を整数(int型)にした値です。
よって、1970年以降の日付の計算であれば、2つ以上のタイムスタンプを用意することで「秒」単位で時間の差分を計算することができます。

コード例

// 1つ目の時刻
$timestamp = strtotime("2019-01-01 12:00:00");

// 2つ目の時刻
$timestamp2 = strtotime("2019-01-10 12:00:00");

// 2つの時刻の差を計算
var_dump($timestamp2 - $timestamp);

出力例

int(777600)

こちらのコードでは、「2019年1月1日 12時」と、「2019年1月10日 12時」の2つのタイムスタンプを使って時間の差分を計算しています。
var_dump関数で出力される「777600」は秒数なので、2つの時間の差分は「777600秒」ということになります。

例えば経過した日数を計算したい場合については、次のように計算します。

コード例

// 1つ目の時刻
$timestamp = strtotime("2019-01-01 12:00:00");

// 2つ目の時刻
$timestamp2 = strtotime("2019-01-10 12:00:00");

// 2つの時刻の差を計算
var_dump(($timestamp2 - $timestamp)/60/60/24);

出力例

int(9)

上記のコードでは、秒数を「1分 = 60秒」、「1時間 = 60分」、「1日 = 24時間」の数字をそれぞれ割って計算しています。

今回は2つの時刻が「12時00分00秒」のため計算結果が整数となりますが、ほとんどの場合は綺麗に割り切れないことが多く浮動小数点数(float型)となります。

新しいタイムスタンプを判断する

タイムスタンプは仕様上、新しい時間の方が経過している秒数が多いため数値も大きくなります。
つまり、時刻の差を計算する際は「新しい時刻 – 古い時刻 = 差」の形にする必要があります。

しかし実際は、計算するタイミングで比較する時刻のうち、どちらが新しい時刻かが分からないこともあります。
その時は、計算前にif文でタイムスタンプの数値の大きさを比較して計算式を自動調整できると便利です。

コード例

// 現時刻のタイムスタンプを取得
$timestamp = time();

// 2つ目のタイムスタンプを取得
$timestamp2 = strtotime("2019-01-10 2:15:30");

// 2つの時刻を比較して新しい時刻を調べる
if( $timestamp < $timestamp2 ) {
	$time_diff = $timestamp2 - $timestamp;
} else {
	$time_diff = $timestamp - $timestamp2;
}

// 経過日数を計算
var_dump( floor( $time_diff / 60 / 60 / 24 ));

出力例

float(7)

floor関数は端数を切り捨てる関数です。
この関数で割り切れなかった数字をカットし、2つの時刻の日数が「7日間」という計算結果を取得することができます。