在括號中使用(T)
你的第二次嘗試看起來幾乎已經是正確的,但它會通過省略()
工作:
$d = DateTime::createFromFormat('D, d M Y H:i:s O T', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
//-----------------------------------------------^^^
var_dump($d);
class DateTime#3 (3) {
public $date =>
string(19) "2014-02-21 14:02:37"
public $timezone_type =>
int(2)
public $timezone =>
string(3) "GMT"
}
這是爲什麼,雖然,I cannot find in the documentation。如果你這樣做:
echo date('T');
// CST
...你找回沒有包圍括號的時區縮寫。但根據鏈接的DateTime::createFromFormat()
文檔,;, :, /, ., ,, -, (or)
應按字面解釋。
哦,這裏就有點耐人尋味:
// Works!!
$d = DateTime::createFromFormat('D, d M Y H:i:s O (T', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
//-----------------------------------------------^^^ Open but no close)
var_dump($d);
class DateTime#6 (3) {
public $date =>
string(19) "2014-02-21 14:02:37"
public $timezone_type =>
int(2)
public $timezone =>
string(3) "GMT"
}
// Fails!!
$d = DateTime::createFromFormat('D, d M Y H:i:s O (T)', 'Fri, 21 Feb 2014 14:02:37 +0000 (GMT)');
// -----------------------------------------------^^^^ open and close()
var_dump($d);
bool(false)
看來這可能是有關T
時區解析行爲確定in this answer,其中,時區縮寫字符串被解析只到最後)
。
可能與'T'解析錯誤詳細[在這個答案](http://stackoverflow.com/questions/8987782/datetime-formatting-and-timezone) –