(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateInterval::createFromDateString — 從字串的相對部分設定 DateInterval
datetime包含相對部分的日期。具體來說,會使用 DateTimeImmutable、DateTime 和 strtotime() 所使用的解析器支援的相對格式來建構 DateInterval。
要使用像 P7D 這樣的 ISO-8601 格式字串,您必須使用 DateInterval::__construct()。
成功時傳回 DateInterval。程序式風格在失敗時傳回 false。
僅限物件導向 API:如果傳入無效的日期/時間字串,則會拋出 DateMalformedStringException。
| 版本 | 說明 |
|---|---|
| 8.3.0 |
如果傳入無效的字串,DateInterval::createFromDateString() 現在會拋出 DateMalformedStringException。以前,它會傳回 false 並發出警告。date_interval_create_from_date_string() 則沒有變更。 |
| 8.2.0 | 使用此方法建立 DateInterval 時,只有 from_string 和 date_string 屬性會顯示。 |
範例 #1 解析有效的日期區間
<?php
// 每組間隔時間相等。
$i = new DateInterval('P1D');
$i = DateInterval::createFromDateString('1 day');
$i = new DateInterval('P2W');
$i = DateInterval::createFromDateString('2 weeks');
$i = new DateInterval('P3M');
$i = DateInterval::createFromDateString('3 months');
$i = new DateInterval('P4Y');
$i = DateInterval::createFromDateString('4 years');
$i = new DateInterval('P1Y1D');
$i = DateInterval::createFromDateString('1 year + 1 day');
$i = new DateInterval('P1DT12H');
$i = DateInterval::createFromDateString('1 day + 12 hours');
$i = new DateInterval('PT3600S');
$i = DateInterval::createFromDateString('3600 seconds');
?>
範例 #2 解析組合和負間隔
<?php
$i = DateInterval::createFromDateString('62 weeks + 1 day + 2 weeks + 2 hours + 70 minutes');
echo $i->format('%d %h %i'), "\n";
$i = DateInterval::createFromDateString('1 year - 10 days');
echo $i->format('%y %d'), "\n";
?>以上範例會輸出
範例 #3 解析特殊的相對日期區間
<?php
$i = DateInterval::createFromDateString('last day of next month');
var_dump($i);
$i = DateInterval::createFromDateString('last weekday');
var_dump($i);以上範例在 PHP 8.2 的輸出
object(DateInterval)#1 (2) {
["from_string"]=>
bool(true)
["date_string"]=>
string(22) "last day of next month"
}
object(DateInterval)#2 (2) {
["from_string"]=>
bool(true)
["date_string"]=>
string(12) "last weekday"
}
以上範例在 PHP 8 的輸出與以下類似
object(DateInterval)#1 (16) {
["y"]=>
int(0)
["m"]=>
int(1)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(2)
["invert"]=>
int(0)
["days"]=>
bool(false)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
object(DateInterval)#2 (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["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(1)
["special_amount"]=>
int(-1)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(1)
}