(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)
}