date_diff

関数の概要

PHPの date_diff 関数は、2つの DateTime オブジェクトの日付の差分を計算し、DateInterval オブジェクトとして返します。日単位や月単位、年単位などの差を取得したい場合に便利な関数です。

パラメータの説明

  • DateTimeInterface $datetime1 – 比較対象の基準となる日付の DateTime オブジェクト。
  • DateTimeInterface $datetime2 – 比較対象となるもうひとつの日付の DateTime オブジェクト。
  • bool $absolute = false – 差分を絶対値として取得するかどうか。
    デフォルトは false(符号付きの差分)。
    true にすると、過去・未来を問わず常に正の差分を返します。

戻り値

DateInterval オブジェクトを返します。このオブジェクトには年、月、日、時間、分、秒の差分情報が含まれており、format メソッドで任意の形式で差分を取得できます。

使用例

基本的な使い方

<?php
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2024-06-01');
$diff = date_diff($date1, $date2);
echo $diff->format('%y 年 %m 月 %d 日');
?>

2024年1月1日と2024年6月1日の差分を「年・月・日」単位で表示します。この場合、「0 年 5 月 0 日」と出力されます。

過去か未来かを考慮した差分取得

<?php
$date1 = new DateTime('2024-06-01');
$date2 = new DateTime('2024-01-01');
$diff = date_diff($date1, $date2);
echo $diff->format('%R%a 日');
?>

%R は差分がプラスかマイナスかを表します。2024年6月1日から2024年1月1日を引いた結果は負の値なので「-152 日」と表示されます。

絶対値で日数を取得する

<?php
$date1 = new DateTime('2024-06-01');
$date2 = new DateTime('2024-01-01');
$diff = date_diff($date1, $date2, true);
echo $diff->format('%a 日');
?>

第3引数に true を渡すことで絶対値の差分を取得できます。この例では「152 日」と正の整数で表示されます。

時間や分も含めた差分を取得する

<?php
$date1 = new DateTime('2024-06-01 10:00:00');
$date2 = new DateTime('2024-06-02 12:30:00');
$diff = date_diff($date1, $date2);
echo $diff->format('%d 日 %h 時間 %i 分');
?>

日付だけでなく時間・分の差分も確認できます。この例の結果は「1 日 2 時間 30 分」となります。

関連する関数

  • DateTime::diff()DateTime オブジェクトのメソッドで、date_diff のオブジェクト指向版。
  • DateTime::add() – 日付を加算するメソッド。
  • DateTime::sub() – 日付を減算するメソッド。
  • strtotime() – 文字列からタイムスタンプを生成し、日付計算に用いることが可能。

まとめ

date_diff 関数は、PHPで日付の差を正確かつ柔軟に扱いたい場合に非常に有用です。DateTime オブジェクト同士を比較し、年・月・日・時間・分・秒単位で差分を取得できるため、経過期間の表示や期限計算、スケジューリング機能に活用できます。絶対値での取得や符号付き差分の取得も可能なので、用途に応じて使い分けましょう。