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

参见

  • date_parse_from_format() - 获取根据指定格式格式化的给定日期的信息,用于解析具有特定给定格式的 datetime
  • checkdate() - 验证格里高利日期,用于格里高利日期验证
  • getdate() - 获取日期/时间信息

添加备注

用户贡献的备注

此页面没有用户贡献的备注。
To Top