PHP入門 DateTimeクラス 日付/時刻値の差分を取得する(diffメソッド)
diffメソッドで日付/時刻値の差を求めることができます。
構文:diffメソッド
DateTime::diff(DateTimeInterface $targetObject [, bool $absolute = false]): DateInterval|false| $targetObject | 差分を求める日付/時刻値 |
| $absolute | 差の絶対値を返すか |
diffメソッドの戻り値は、DateIntervalオブジェクトです。DateIntervalオブジェクトの内容は、formatメソッドで取得します。
構文:formatメソッド
DateInterval::format(string $format): string| $format | 書式文字列 |
書式文字列には、「書式文字列で利用可能な記述子」を含めることができます。DateTimeクラスのformatメソッドと考え方は同じですが、利用できる記述子は異なります。
書式文字列で利用可能な記述子
| 記述子 | 概要 |
|---|---|
| %Y、%y | 年 |
| %M、%m | 月 |
| %D、%d | 日 |
| %a | 総日数 |
| %H、%h | 時間 |
| %I、%i | 分 |
| %S、%s | 秒 |
| %F、%f | マイクロ秒 |
| %R、%r | 負数は「-」、整数は「+」(%rでは整数は空文字) |
記述子の大文字/小文字の違いは、結果が1桁の場合です(Fとfは6桁未満の場合)。小文字記述子はそのままの数値を返しますが、大文字記述子は先頭にゼロを補った結果を返します。また、引数$absoluteをtrueに設定した場合、diffメソッドは日付/時刻値の絶対差を求めます。つまり両者の大小を意識しないので、$R、%rは常に「+」となります。
例
<?php
$dt1 = new DateTime('2022/01/01 10:10:00');
$dt2 = new DateTime('2024/01/01 10:10:00');
$interval = $dt1->diff($dt2,true);
print $interval->format('%Y年%M月%d日 %H時%I分%S秒');