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