2012-11-28 89 views
6

我有datestrings,看起來像這樣:的strtotime返回false

"2012 28 Nov 21:00 CET" 

strtotime("2012 28 Nov 21:00 CET")返回FALSE。

有沒有辦法將這個字符串轉換爲日期對象,還是我需要格式化它不同?

+2

嘗試使用['date_parse_from_format'](http://php.net/manual/en/function.date-parse-from-format.php)。 –

+1

你從哪裏得到字符串日期? – phpisuber01

+0

@ phpisuber01從html頁面提取它。 – Johan

回答

13

2012 28 Nov 21:00 CET是奇怪的日期/時間格式。 Y型d-M?你在哪裏得到?

無論如何,DateTime對象有一個方法createFromFormat會做得更好分析認爲:

$dt = DateTime::createFromFormat("Y d M H:i T", '2012 28 Nov 21:00 CET'); 
$ts = $dt->getTimestamp(); 
echo $ts; // 1354132800 

這裏試試:http://codepad.viper-7.com/NfAmcw

strtotime期望一個 「英文文本的日期時間」 (according to the manual) ,YDM不是。任何時候strtotime返回false,它只是不理解你的字符串,在這個應用程序中是預期的。

注:

日期在M/d/y或DMY格式通過查看 各個組件之間的分隔消除歧義:如果分離器上這個問題的手冊交易的注意事項是一個 斜線(/),那麼假設美國的m/d/y;而如果 分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式爲 。

爲避免潛在的歧義,儘可能使用ISO 8601(YYYY-MM-DD) 日期或DateTime :: createFromFormat()。

這也是一樣,DateTime是任何與日期或時間交互的優秀工具。

文檔

+0

太棒了!非常感謝你! – Xyon

1

strtotime不創建日期對象,它只是試圖解析您的輸入並返回一個unix時間戳。

你可以在這裏找到有效格式:http://www.php.net/manual/en/datetime.formats.php

echo strtotime("2012-11-28T21:00:00+01:00"); 

將輸出1354132800

創建一個PHP DateTime對象,你可以這樣做:

$date = new DateTime('2012-11-28T21:00:00+01:00'); 
echo $date->format('Y-m-d H:i:s');