2012-04-23 43 views
0

我收到一個外部RSS源帖子在不同的網站,我注意到他們都有不同的發佈日期格式。 一些使用格式是這樣的:使用PHP strtotime()函數

2012-04-09T08:23:07Z 

Fri, 06 Apr 2012 01:25:43 0000 

仍然有很多格式的,但我只是顯示你的兩個例子。

現在,我希望一切都有一個統一的格式,所以我使用strtotime()。這裏是我的代碼:

$date = "2012-04-09T08:23:07Z"; 
date("F d, Y", strtotime($date)); 
/* Result: April 09, 2012 */ 

我在這裏的問題是第二格式Fri, 06 Apr 2012 01:25:43 0000

有在最後一個0000這使的strtotime()行爲怪異。

$date = "Fri, 06 Apr 2012 01:25:43 0000"; 
date("F d, Y", strtotime($date)); 
/* Result: April 06, 0000 */ 

顯然結果應該是2012年4月6日。

我在這裏的問題是,我怎麼能不讓strtotime()在檢測到最後有0000的格式時表現奇怪。任何想法如何做到這一點?您的幫助將不勝感激!謝謝! :)

謝謝!

+1

您是否發現有導致問題的其他日期格式?如果這是唯一的,你可能只需要以「0000」結尾的特殊字符串。 – 2012-04-23 04:00:59

回答

1

我敢肯定你有一個格式化的問題:

Fri, 06 Apr 2012 01:25:43 0000 

通知0000前兩個空間?這不是巧合。原來可能是這樣的:

Fri, 06 Apr 2012 01:25:43 +0000 

這是用gmdate(DATE_RFC822)生成的。在URI中,+符號通常會被轉換爲空格。我認爲這是你的問題。

+0

是的,我注意到,也有一個,在0000之前有一個+ symbl,但是當我將它存儲在數據庫中時,+符號消失了,是因爲我試圖使用mysql_real_escape_string()嗎? – PinoyStackOverflower 2012-04-23 05:30:01

+1

不,'mysql_real_escape_string'不能轉義'+'字符,所以當你從XML中提取它時,可能會出現這種情況? – 2012-04-23 06:45:48

+0

@傑克:你搖滾..! – mithunsatheesh 2012-04-23 08:58:22

1

剛剛剝離「0000」如何?例如:

$ date = str_replace(「0000」,「」,$ date);

+0

這很聰明:) – PinoyStackOverflower 2012-04-23 05:33:53

+1

RFC822並不表示GMT作爲先決條件,所以它也可以以'0800'結尾。 – 2012-04-23 06:40:16

1

試試這個:

<?php 
$date = "Fri, 06 Apr 2012 01:25:43 0000"; 

if (strtotime($date) !== false) 
{ 
$timestamp = strtotime($date); 
    echo date("F d, Y", $timestamp); 
} 
else 
{ 
    echo "error"; 
} 

?> 

爲$日期= 「星期五,2012年4月6日1時25分43秒0000」; 輸出錯誤。

$ date =「Fri,06 Apr 2012 01:25:43」; 給出了輸出。