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