2016-06-22 60 views
0

我創建PHP的DateTime有一個這樣的字符串:日期時間createfromformat母鹿不行

$time = '19:14, 9 June 2016 (UTC)'; 
\DateTime($time); 

,工作得非常好,但因爲時間來自外部的ressource,它有時無有效樣

$time = '19:14, 9 oktober 2016 (UTC)'; #oktober instead of october 

然後DateTime以致命錯誤結束。爲了防止這種情況,我想在使用DateTime之前檢查時間字符串是否有效。我發現的唯一解決方案是使用DateTime::createFromFormat()。我不太喜歡這個解決方案,因爲在新的DateTime()我可以使用幾種格式,在createFromFormat我必須檢查每種格式。

然而,第二個問題是,createFromFormat甚至不承認我正確TIMESTRING:

$time = '19:14, 9 June 2016 (UTC)'; 
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); 

返回false。但使用date()的格式返回完全相同的字符串:

echo date('H:i, d F Y (e)', time()); 
#12:14, 22 June 2016 (UTC) 
+0

您所在的地區的時區爲GMT + 7? –

+0

爲什麼?腳本時區是utc – Asara

+0

沒有它的工作時區,但它爲什麼不與時區一起工作是需要調查的東西... –

回答

0

Charlotte Dunois和iainn在評論中回答了它。這是一個錯誤,你必須刪除時區(e)周圍的括號,更精確的只是右括號。

$time = '19:14, 9 June 2016 (UTC)'; 
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); #does not work 
$valid = \DateTime::createFromFormat('H:i, d F Y e', $time); #works 
$valid = \DateTime::createFromFormat('H:i, d F Y (e', $time); #works