(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í)間的字符串。
timezone
DateTimeZone 對象, 表示在解析日期時(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