(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 的值。相關案例請參見範例。
返回包含已解析日期/時間資訊的 陣列。
返回的陣列包含 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。然而,在以下範例中,年份元素仍為 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