(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTime::createFromFormat -- date_create_from_format — 根據給定的格式解析日期時(shí)間字符串
面向對象風(fēng)格
$format, string $time, DateTimeZone $timezone = ?): DateTime過(guò)程化風(fēng)格
將 time 參數給定的日期時(shí)間字符串,
根據 format 參數給定的格式
解析為一個(gè)新的 DateTime 對象。
format在解析日期時(shí)間字符串的時(shí)候使用的格式 string。 參加下列的格式清單。 大部分格式和 date() 函數中的格式是一致的。
format 中的字符 |
解釋 | 示例 |
|---|---|---|
| 日 | --- | --- |
d 和 j |
一個(gè)月中的第幾天,2 位數字表示,有前導 0 或者無(wú)前導 0 |
01 到 31 或者
1 到 31
|
D 和 l |
星期幾的文字表示 |
Mon 到 Sun 或者
Sunday 到 Saturday
|
S |
2 個(gè)字母表示的一個(gè)月中的第幾天(序數詞), 在進(jìn)行解析的時(shí)候會(huì )被忽略 |
st,nd,rd 或者
th。
|
z |
一年中的第幾天,從 0 開(kāi)始 | 0 到 365 |
| 月 | --- | --- |
F 和 M |
文本表示的月份,例如 January 或者 Sept |
January 到 December 或者
Jan 到 Dec
|
m 和 n |
數值表示的月份,有前導 0 或者無(wú)前導 0 |
01 到 12 or
1 到 12
|
| 年 | --- | --- |
Y |
4 位數字表示的年 | 例如:1999 或 2003 |
y |
2 位數字表示的年, 可用的范圍是 1970 至 2069(不含) |
例如:
99 或 03
(表示 1999 和
2003)
|
| 時(shí)間 | --- | --- |
a 和 A |
上午、下午 | am 或 pm |
g and h |
12 小時(shí)制的小時(shí),有前導 0 或者無(wú)前導 0 |
1 到 12 或者
01 到 12
|
G 和 H |
24 小時(shí)制的小時(shí),有前導 0 或者無(wú)前導 0 |
0 到 23 或
00 到 23
|
i |
分鐘,有前導 0 | 00 到 59 |
s |
秒,有前導 0 | 00 到 59 |
u |
微秒,最多到 6 位數字 | 示例:45,654321 |
| 時(shí)區 | --- | --- |
e,O,
P 和 T
|
時(shí)區名稱(chēng),或者是以 UTC 時(shí)區為基準的小時(shí)偏移量, 或者是以 UTC 為基準的小時(shí)和分鐘的偏移量, 小時(shí)和分鐘之間用冒號(:)分隔。 | 示例:UTC,GMT,
Atlantic/Azores 或
+0200 或 +02:00 或
EST,MDT
|
| 完整的日期和時(shí)間 | --- | --- |
U |
從 Unix Epoch (January 1 1970 00:00:00 GMT) 開(kāi)始計算的時(shí)間,以秒為單位 | 示例:1292177455 |
| 空白字符和分隔字符 | --- | --- |
(空格) |
一個(gè)空格字符或者一個(gè) tab 字符 | 示例: |
# |
可以是一下分隔符號中的任意一個(gè): ;,
:,/,.,
,,-,( 或
)
|
示例:/ |
;,
:,/,.,
,,-,( 或
)
|
特殊字符 | 示例:- |
? |
隨機字節 | 示例:^ (需要注意的是,
對于 UTF-8 字符,可能會(huì )需要多個(gè) ?。
這種情況下,請使用 *)
|
* |
隨機字節,直到遇到下一個(gè)有效的分隔符號或者數值 | 示例:使用 Y-*-d 格式用來(lái)解析 2009-aWord-08 字符串的時(shí)候,
* 會(huì )匹配
aWord |
! |
將所有的字段(年、月、日、時(shí)、分、秒、微秒以及時(shí)區)重置到 Unix Epoch 時(shí)間。 | 如果不使用 !, 格式,
那么所有的字段會(huì )被設置為系統當前的日期和時(shí)間。 |
| |
將尚未被解析的字段,也即格式字符串中未明確指定的字段 (年、月、日、時(shí)、分、秒、微秒以及時(shí)區) 重置到 Unix Epoch 時(shí)間。 | Y-m-d|
會(huì )解析日期時(shí)間字符串中的年、月和日,
但是對于時(shí)、分、秒字段會(huì )設置為 0. |
+ |
在格式字符串中使用這個(gè)格式表示字符, 并且所提供的日期時(shí)間字符串中包含除了格式字符之外的其他數據的話(huà),不會(huì )發(fā)出一個(gè)錯誤,而是發(fā)出一個(gè)警告。 | 使用 DateTime::getLastErrors() 方法 來(lái)檢測所給定的日期時(shí)間字符串中是否包含格式字符串指定的內容之外的數據。 |
如果在格式字符串中包含不可識別的字符, 那么會(huì )導致解析失敗,并且在返回的結構中附加一個(gè)錯誤信息。 可以通過(guò) DateTime::getLastErrors() 來(lái)探查解析是否存在錯誤。
如果需要在格式字符串 format 參數中使用
上述表示格式的字符作為一個(gè)普通字符,請對其使用反斜線(xiàn)(\)進(jìn)行轉義。
如果格式字符串參數 format
中不包含 ! 字符,
那么沒(méi)有在 format 參數中指明的字段,
在解析結果中將會(huì )被設置為系統當前時(shí)間對應的字段值。
如果格式字符串參數 format
包含了 ! 字符,
那么沒(méi)有在 format 參數中指明的字段,
以及在 ! 左側對應的字段,
在解析結果中將會(huì )被設置為 Unix epoch 時(shí)間對應的字段。
The Unix epoch 為 1970-01-01 00:00:00 UTC。
time用來(lái)表示日期時(shí)間的字符串。
timezoneDateTimeZone 對象, 表示在解析日期時(shí)間字符串的時(shí)候需要使用的時(shí)區。
如果忽略 timezone 參數,
并且表示日期時(shí)間的字符串 time 中也不包含時(shí)區信息,
那么將會(huì )使用系統當前時(shí)區作為解析結果對象的時(shí)區。
注意:
如果
time參數 是 UNIX 時(shí)間戳格式(例如:946684800), 或者其中已經(jīng)包含了時(shí)區信息(例如:2010-01-28T15:00:00+02:00), 那么timezone以及系統當前時(shí)區 都將會(huì )被忽略。
返回一個(gè) DateTime 對象。 或者在失敗時(shí)返回 false。
| 版本 | 說(shuō)明 |
|---|---|
| 5.3.9 |
新增 format 格式字符串中對于 + 格式字符的支持。
|
示例 #1 DateTime::createFromFormat() 例程
面向對象風(fēng)格
<?php
$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');
?>
過(guò)程化風(fēng)格
<?php
$date = date_create_from_format('j-M-Y', '15-Feb-2009');
echo date_format($date, 'Y-m-d');
?>
以上例程會(huì )輸出:
2009-02-15
示例 #2 DateTime::createFromFormat() 的復雜用法
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
以上例程的輸出類(lèi)似于:
Current time: 2010-04-23 10:29:35 Format: Y-m-d; 2009-02-15 10:29:35 Format: Y-m-d H:i:s; 2009-02-15 15:16:17 Format: Y-m-!d H:i:s; 1970-01-15 15:16:17 Format: !d; 1970-01-15 00:00:00
示例 #3 格式化字符串中包含了需要進(jìn)行轉義的字符
<?php
echo DateTime::createFromFormat('H\h i\m s\s','23h 15m 03s')->format('H:i:s');
?>
以上例程的輸出類(lèi)似于:
23:15:03