2016-06-08 71 views
1

this question的幫助下,我已經能夠將日期字符串解析爲DateTime對象,然後以所需的格式顯示它。 DateTime構造函數在解析DateTime字符串時有很好的例外 - 它無法區分dd/mm/YYYYmm/dd/YYYY之間的區別。格式未知時創建PHP日期時間

如果我做到以下幾點:

$dt = new DateTime("05/03/1900"); // 5th march 1900 
echo $dt->format('Y-m-d'); 

然後我得到以下輸出:

1900-05-03 

但是,原來的日期是dd/mm/YYYY格式,所以我的輸出是不正確 - 我現在有3rd May 1900

解析日期字符串時,有沒有辦法將DateTime設置爲更喜歡dd/mm/YYYY而不是mm/dd/YYYY

編輯: 我打電話在這個類的構造函數date_default_timezone_set('Europe/London');,但這似乎並沒有產生任何影響。也許這與DateTime類沒有關係。

+2

對於時區:'日期時間:: createFromFormat( 'd/M/Y','05/03/1900' ,新DateTimeZone(「歐洲/倫敦)) ;' – vaso123

+1

DateTime對象與'strtotime()' 如果您使用'/'作爲分隔符,並且使用'-'作爲分隔符,則假定日期爲美國格式。 – RiggsFolly

+0

如果格式未知,那麼你不能可靠地解析它。怎麼說你的日期是dd/mm/yyyy或者mm/dd/yyyy? '/'暗示這是一種美國格式,但沒有說它必須是。那要麼是3月5日,要麼是5月3日。你不能說。 –

回答

5

可以使用DateTime::createFromFormat

$dt = DateTime::createFromFormat('d/m/Y', '05/03/1900'); 
echo $dt->format('Y-m-d'); 
+0

請添加時區。 – vaso123

+0

這實際上是我在使用'DateTime'構造函數之前的第一次嘗試。然而,這似乎返回一個布爾值而不是'DateTime'對象,因爲我然後得到錯誤:'致命錯誤:調用布爾型' –

+0

@BrianButterfield上的成員函數格式()如果你得到一個布爾值,它意味着功能失敗。仔細檢查您傳遞的格式,並確定它們的格式相同。 – Jrod