目次
秒・分・時間・日の差分を求める(getTimestamp)
public DateTime::getTimestamp(): int |
DateTime::getTimestamp() を使うと、秒単位のUnixタイムスタンプを取得でき、2つの日付の差を秒で求めることができます。
<?php
$date1 = new DateTime('2020-01-01 10:00:00');
$date2 = new DateTime('2020-01-03 13:30:10');
// タイムスタンプを取得
$ts1 = $date1->getTimestamp();
$ts2 = $date2->getTimestamp();
// 差を計算(秒単位)
$diff_seconds = $ts2 - $ts1;
echo $diff_seconds; // 185410秒
echo nl2br("\n");
// 分に換算
echo floor($diff_seconds / 60); // 3090分
echo nl2br("\n");
// 時間に換算
echo floor($diff_seconds / 3600); // 51時間
echo nl2br("\n");
// 日に換算
echo floor($diff_seconds / 86400); // 2日
getTimestamp() は 「1970-01-01 00:00:00 UTC」からの経過秒数 を返します。
そのため、2つのタイムスタンプの差を取ると「秒差」 が出ます。
あとは 60 で割れば「分」、3600 で割れば「時間」、86400 で割れば「日」に換算できます。
日の差分を求める(diff)
public DateTime::diff ( DateTimeInterface $targetObject [, bool $absolute = FALSE ] ) : DateInterval |
diffメソッドで日の差分を求めるサンプルです。
<?php
$date1 = new DateTime('2020-07-10');
$date2 = new DateTime('2020-08-05');
$date3 = $date1->diff($date2);
print $date3->format('%R%a'); // +26
print $date3->format('%a'); // 26
$date4 = $date2->diff($date1);
print $date4->format('%R%a'); // -26
print $date4->format('%a'); // 26
2,3行目は、DateTimeクラスのオブジェクトを生成しています。
5行目は、diffメソッドで$date1と$date2の差を求めています。戻り値はDateIntervalオブジェクトです。
6,7行目の、%a は「差の日数の絶対値」、%R は「符号 (+ または -)」です。
この場合 $date2 > $date1 なので 26となり、
6行目は、符号ありの+26、7行目は、符号なしの26となります。
9行目は、$date2 から $date1 を引いているので、差はマイナス方向となります。
以下は、PHPマニュアルのDateIntervalクラスのformatメソッドのリンクです。
https://www.php.net/manual/ja/dateinterval.format.php
時間・分・秒の差分を求める(diff)
diffメソッドで時間・分・秒の差分を求めるサンプルです。
<?php
$date1 = new DateTime('2020-01-01 10:00:00');
$date2 = new DateTime('2020-01-03 13:30:10');
$date3 = $date1->diff($date2);
echo $date3->days * 24 + $date3->h; // 51 (時間)
echo $date3->days * 24 * 60 + $date3->h * 60 + $date3->i; // 3090(分)
echo $date3->days * 24 * 60 * 60 + $date3->h * 60 * 60
+ $date3->i * 60 + $date3->s; //185410(秒)
2,3行目は、DateTimeクラスのオブジェクトを生成しています。
5行目は、diffメソッドで日時の差分を計算しています。戻り値はDateIntervalオブジェクトです。
この場合の差は、2日3時間30分10秒です。
7行目は、差を時間で出しています。
$date3->days = 2(日数)
$date3->h = 3(時間)
→ 2*24 + 3 = 51 時間
9行目は、差を分で出しています。
日 → 分換算: 2*24*60 = 2880
時 → 分換算: 3*60 = 180
分: 30
合計 2880 + 180 + 30 = 3090 分
11,12行目は、差を秒で出しています。
日 → 秒: 2*24*60*60 = 172800
時 → 秒: 3*3600 = 10800
分 → 秒: 30*60 = 1800
秒: 10
合計 172800 + 10800 + 1800 + 10 = 185410 秒
関連の記事