(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::__construct — 新しい DateInterval オブジェクトを作成する
duration
間隔。
最初は P
から始まります。これは period
を表します。 間隔の単位は、整数値の後に間隔指示子をつけて表します。 時間の要素を含む場合は、時間部分の前に文字 T
を入れます。
間隔指示子 | 説明 |
---|---|
Y | 年 |
M | 月 |
D | 日 |
W | 週。日付に変換されます。 PHP 8.0.0 より前のバージョンでは、 D と組み合わせて使えませんでした。 |
H | 時間 |
M | 分 |
S | 秒 |
いくつか簡単な例を示しましょう。 P2D
は 2 日、 PT2S
は 2 秒、そして P6YT5M
は 6 年と 5 分を表します。
注意:
複数の単位を指定するときは、 大きな単位を左、小さな単位を右の順に書かなければなりません。 つまり年は月より先、月は日より先、日は分より先などとなります。 1 年と 4 日を表すのは
P1Y4D
であり、P4D1Y
ではありません。
日付と時刻で間隔を指定することもできます。 1 年と 4 日をこの方式で表すと P0001-00-04T00:00:00
のようになります。 しかし、この方式では繰り返し単位以上の値を指定することはできません (たとえば 25
時間などとは指定できません)。
これらのフォーマットは » ISO 8601 duration specification に基づくものです。
duration
が間隔の値としてパースできない場合、 DateMalformedIntervalStringException がスローされます。 PHP 8.3 より前のバージョンでは、Exception がスローされていました。
バージョン | 説明 |
---|---|
8.3.0 | Exception の代わりに、 DateMalformedIntervalStringException がスローされるようになりました。 |
8.2.0 | アクセス可能なプロパティは y から f , invert , days だけになりました。 新しい boolean プロパティ from_string もアクセス可能です。 |
8.0.0 | W が、D と組み合わせて使えるようになりました。 |
例1 DateInterval オブジェクトを作成して使う例
<?php
// Create a specific date
$someDate = \DateTime::createFromFormat("Y-m-d H:i", "2022-08-25 14:18");
// Create interval
$interval = new \DateInterval("P7D");
// Add interval
$someDate->add($interval);
// Convert interval to string
echo $interval->format("%d");
上の例の出力は以下となります。
例2 DateInterval の例
<?php
$interval = new DateInterval('P1W2D');
var_dump($interval);
?>
上の例の PHP 8.2 での出力は、このようになります。:
object(DateInterval)#1 (10) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(9) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["invert"]=> int(0) ["days"]=> bool(false) ["from_string"]=> bool(false) }
上の例の PHP 8 での出力は、このようになります。:
object(DateInterval)#1 (16) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(9) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> bool(false) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
上の例の PHP 7 での出力は、このようになります。
object(DateInterval)#1 (16) { ["y"]=> int(0) ["m"]=> int(0) ["d"]=> int(2) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["f"]=> float(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> bool(false) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }