(PHP 5 >= 5.2.0, PHP 7, PHP 8)
date_parse — 返回包含给定日期/时间的详细信息的关联数组
date_parse() 根据与strtotime()和DateTimeImmutable::__construct()相同的规则解析给定的datetime
字符串。它不返回Unix时间戳(使用strtotime())或DateTimeImmutable对象(使用DateTimeImmutable::__construct()),而是返回一个关联数组,其中包含它在给定的datetime
字符串中检测到的信息。
如果找不到有关某些元素组的信息,则这些数组元素将设置为false
或缺失。如果需要根据相同的datetime
字符串构造时间戳或DateTimeImmutable对象,则可以将更多字段设置为非false
值。请参阅示例中发生这种情况的情况。
返回包含已解析日期/时间信息的array。
返回的数组包含year
、month
、day
、hour
、minute
、second
、fraction
和is_localtime
的键。
如果存在is_localtime
,则zone_type
指示时区的类型。对于类型1
(UTC偏移量),会添加zone
、is_dst
字段;对于类型2
(缩写),会添加tz_abbr
、is_dst
字段;对于类型3
(时区标识符),会添加tz_abbr
、tz_id
字段。
如果datetime
字符串中存在相对时间元素,例如+3 days
,则返回的数组包含一个嵌套数组,其键为relative
。然后,此数组包含键year
、month
、day
、hour
、minute
、second
,如果需要,则包含weekday
和weekdays
,具体取决于传入的字符串。
该数组包含warning_count
和warnings
字段。第一个字段指示有多少个警告。元素warnings
数组的键指示给定datetime
中出现警告的位置,其字符串值描述警告本身。
该数组还包含error_count
和errors
字段。第一个字段指示找到了多少个错误。元素errors
数组的键指示给定datetime
中出现错误的位置,其字符串值描述错误本身。
warnings
和errors
数组中的数组元素数量可能小于warning_count
或error_count
,如果它们出现在相同的位置。
如果日期/时间格式有错误,则元素“errors”将包含错误消息。
版本 | 描述 |
---|---|
7.2.0 | 返回数组的zone 元素现在表示秒而不是分钟,并且其符号反转。例如-120 现在是7200 。 |
示例 #1 使用全面的datetime
字符串的date_parse()示例
<?php
var_dump(date_parse("2006-12-12 10:00:00.5"));
?>
上面的示例将输出
array(12) { ["year"]=> int(2006) ["month"]=> int(12) ["day"]=> int(12) ["hour"]=> int(10) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0.5) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) }
只有当它们包含在给定的datetime
字符串中时,时区元素才会显示出来。在这种情况下,将始终存在zone_type
元素以及更多其他元素,具体取决于其值。
示例 #2 带有时区缩写信息的date_parse()
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 BST"));
?>
上面的示例将输出
array(16) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(10) ["minute"]=> int(28) ["second"]=> int(17) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(true) ["zone_type"]=> int(2) ["zone"]=> int(0) ["is_dst"]=> bool(true) ["tz_abbr"]=> string(3) "BST" }
示例 #3 带有时区标识符信息的date_parse()
<?php
var_dump(date_parse("June 2nd, 2022, 10:28:17 Europe/London"));
?>
上面的示例将输出
array(14) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(10) ["minute"]=> int(28) ["second"]=> int(17) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(true) ["zone_type"]=> int(3) ["tz_id"]=> string(13) "Europe/London" }
如果解析更小的datetime
字符串,则可用的信息较少。在此示例中,所有时间部分都返回为false
。
示例 #4 使用最小字符串的date_parse()
<?php
var_dump(date_parse("June 2nd, 2022"));
?>
上面的示例将输出
array(12) { ["year"]=> int(2022) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> bool(false) ["minute"]=> bool(false) ["second"]=> bool(false) ["fraction"]=> bool(false) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) }
相对格式不影响从绝对格式解析的值,但会解析到“relative”元素中。
示例 #5 使用相对格式的date_parse()
<?php
var_dump(date_parse("2006-12-12 10:00:00.5 +1 week +1 hour"));
?>
上面的示例将输出
array(13) { ["year"]=> int(2006) ["month"]=> int(12) ["day"]=> int(12) ["hour"]=> int(10) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0.5) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) ["relative"]=> array(6) { ["year"]=> int(0) ["month"]=> int(0) ["day"]=> int(7) ["hour"]=> int(1) ["minute"]=> int(0) ["second"]=> int(0) } }
某些节,例如Thursday
会将字符串的时间部分设置为0
。如果将Thursday
传递给DateTimeImmutable::__construct(),它也会导致小时、分钟、秒和分数设置为0
。但在下面的示例中,year 元素仍然为 false
。
示例 #6 带有副作用的date_parse()
<?php
var_dump(date_parse("Thursday, June 2nd"));
?>
上面的示例将输出
array(13) { ["year"]=> bool(false) ["month"]=> int(6) ["day"]=> int(2) ["hour"]=> int(0) ["minute"]=> int(0) ["second"]=> int(0) ["fraction"]=> float(0) ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } ["is_localtime"]=> bool(false) ["relative"]=> array(7) { ["year"]=> int(0) ["month"]=> int(0) ["day"]=> int(0) ["hour"]=> int(0) ["minute"]=> int(0) ["second"]=> int(0) ["weekday"]=> int(4) } }
datetime