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