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