2013-10-04 116 views
0

我試圖解析以下字符串:PHP的日期時間createformat解析

Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time) 

但我在努力尋找相應的格式,我想:

$date= DateTime::createFromFormat('D M d Y H:i:s eO (*)','Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)'); 
    echo $date->format('Y-m-d'); 

導致錯誤。問題是GMT + 0200和括號之間沒有空格。下面的作品很好

$date= DateTime::createFromFormat('D M d Y H:i:s e O','Thu Oct 03 2013 07:03:41 GMT +0200'); 
echo $date->format('Y-m-d'); 

但是(顯然)我應該能夠解析第一個例子。那麼你有什麼建議如何正確的格式應該是什麼樣子?

錯誤,我得到:$ date的

Fatal error: Call to a member function format() on a non-object in C:\.... 

的var_dump調用$日期 - >格式之前:

boolean false 
+0

它給了什麼錯誤 – Fredd

+0

你看到的錯誤是什麼?另外,你錯過了一個撇號 - > e O',[這裏?]週四<--- –

+0

對不起,ctrl + c ctrl + v錯字。我還編輯了錯誤 – user1762087

回答

1

的問題是格式字符串,這應該是

D M d Y H:i:s e+ 

我已經取代eOe因爲輸入包含GMT+0200,這確實有「GMT」和偏移之間的隔板。我還用+取代了+部分,這是唯一可以消耗可變輸入量的說明符(*匹配一個令牌,即一個單詞 - 如果解析失敗後有更多輸入)。

請注意,由於使用+(使用DateTime::getLastErrors來查看它),仍然會有警告,但轉換會正常工作。

+0

愛你並且謝謝 – user1762087

+0

你可以鏈接到使用'+'的文檔嗎?我可能錯過了一些東西,但找不到任何atm。 – vascowhite

+0

@vascowhite:http://php.net/manual/en/datetime.createfromformat.php,表格底部。 – Jon

1

你可以拆分輸入字符串。這裏是剝皮這個特別的貓的一種方法: -

$dateString = 'Thu Oct 03 2013 07:03:41 GMT+0200(Central Europe Standard Time)'; 
\DateTime::createFromFormat('D M d Y H:i:s O', explode('(', $dateString)[0]); 

更多的幫助,請參見http://php.net/date

See it working

+0

是的,我在想大致相同的事情,但試圖避免該解決方案:-) – user1762087

+0

@ user1762087我可以欣賞這一點。但是,這種方法確實避免了產生Jon方法產生的警告。但是,如果您沒有檢查DateTime :: getLastErrors()作爲警告,那麼這對您而言不是問題。 – vascowhite