date_parse

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

date_parse返回指定日期/时间的详细信息的关联数组

说明

date_parse(string$datetime): array

date_parse() 根据与 strtotime()DateTimeImmutable::__construct() 相同的规则解析指定 datetime 字符串。它不返回 Unix 时间戳(使用 strtotime())或者 DateTimeImmutable 对象(使用 DateTimeImmutable::__construct()),而是返回包含在指定 datetime 字符串中检测到相关信息的关联数组。

如果找不到某组元素的信息,那么这些数组元素将会设置为 false 或缺失。如果需要从相同的 datetime 字符串构建时间戳或者 DateTimeImmutable 对象,需要将更多字段设置为非 false 值。查看以下示例以了解情况。

参数

datetime

DateTimeImmutable::__construct() 接受的日期/时间格式。

返回值

返回 array,包含解析日期/时间的信息。

返回的数组存在以下键 yearmonthdayhourminutesecondfractionis_localtime

如果存在 is_localtime,则 zone_type 表示时区类型。类型 1(UTC 时差),添加 zoneis_dst;类型 2(时区缩写),添加 tz_abbris_dst;类型 3(时区标识符),添加 tz_abbrtz_id

如果 datetime 字符串存在类似 +3 days 这样的相对时间元素,则返回的数组则包含键为 relative 的嵌套数组。然后此数组将包含如下键 yearmonthdayhourminutesecond,如果必要还会包含 weekdayweekdays,具体取决于传入的字符串。

数组包含 warning_countwarnings 字段。第一个表示发现了多少警告。元素 warnings 的键表示指定 datetime 发生警告的位置,值为字符串,描述警告本身。

数组也包含 error_counterrors 字段。第一个表示发现了多少错误。元素 errors 的键表示指定 datetime 发生错误的位置,值为字符串,描述错误本身。

警告

如果同一个位置存在多个警告/错误,那么 warningserrors 数组中元素的数量可能会少于 warning_count 或者 error_count

错误/异常

date/time 的格式有错误时,返回数组的 '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() with side-effects

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

参见

  • date_parse_from_format() - Get info about given date formatted according to the specified format,以解析具有特定格式的datetime
  • checkdate() - 验证一个格里高里日期,以便于公历日期验证
  • getdate() - 获取日期/时间信息
To Top