(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
。但在下面的示例中,年份元素仍然保留为 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