PHP Conference Japan 2024

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。但在下面的示例中,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)
  }
}

参见

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

添加注释

用户贡献的注释

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