DateIntervalクラス

クラスDateIntervalは、PHPで時間間隔を操作することを可能にします。 これは、2つの日付間の差分を保存するため、または日付操作メソッドで間隔を指定するために使用されます。 間隔は特別なフォーマットで作成されます。

構文

phpDateInterval::__construct(string $duration)

間隔のフォーマット

フォーマットは文字P (period) と以下の要素で構成されます:

phpP{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W

このフォーマットでは: Y - 年, M - 月, D - 日, T - 時間の区切り文字, H - 時間, M - 分, S - 秒, W - 週。

これらの文字の前に、対応する値を書く必要があります。 例えば、3Yは3年を意味し、 5Y2Mは5年と2ヶ月を表します。

作成後、オブジェクトDateInterval は以下のプロパティを含みます:

php<?php
  $interval->y  // 年
  $interval->m  // 月
  $interval->d  // 日
  $interval->h  // 時間
  $interval->i  // 分
  $interval->s  // 秒
  $interval->f  // マイクロ秒
  $interval->invert // 間隔が負の場合1
  $interval->days // 日数 (diff()で作成された場合)
?>

例で間隔の動作を見てみましょう:

例

1時間、45分、30秒の間隔を作成します:

php<?php
  $interval = new DateInterval('PT1H45M30S');
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 1
  'i' => 45
  's' => 30
)

例

3週と2日の間隔を作成します:

php<?php
  $interval = new DateInterval('P3W2D');
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 23
  'h' => 0
  'i' => 0
  's' => 0
)

例

5ヶ月、10日、6時間の間隔を作成します:

php<?php
  $interval = new DateInterval('P5M10DT6H');
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 0
  'm' => 5
  'd' => 10
  'h' => 6
  'i' => 0
  's' => 0
)

例

2年と15分の間隔を作成します:

php<?php
  $interval = new DateInterval('P2YT15M');
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 2
  'm' => 0
  'd' => 0
  'h' => 0
  'i' => 15
  's' => 0
)

例

1日、12時間、30秒の間隔を作成します:

php<?php
  $interval = new DateInterval('P1DT12H30S');
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 1
  'h' => 12
  'i' => 0
  's' => 30
)

例

1年と3ヶ月の負の間隔 (過去への間隔) を作成します:

php<?php
  $interval = new DateInterval('P1Y3M');
  $interval->invert = 1;
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 1
  'm' => 3
  'd' => 0
  'h' => 0
  'i' => 0
  's' => 0
  'invert' => 1
)

例

2時間、30分の負の間隔 (過去への間隔) を作成します:

php<?php
  $interval = new DateInterval('PT2H30M');
  $interval->invert = 1;
  var_dump($interval);
?>

コードの実行結果:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 2
  'i' => 30
  's' => 0
  'invert' => 1
)

例

現在の日付に間隔を加算します:

php<?php
  $date = new DateTime('2023-01-01');
  $interval = new DateInterval('P10D');
  $date->add($interval);
  echo $date->format('Y-m-d');
?>

コードの実行結果:

php'2023-01-11'

例

2つの日付間の差分を計算します:

php<?php
  $date1 = new DateTime('2023-01-01');
  $date2 = new DateTime('2023-02-15');
  $interval = $date1->diff($date2);
  echo $interval->format('%m months %d days');
?>

コードの実行結果:

php'1 months 14 days'

関連項目