2010-02-13 98 views
2

我試圖在PHP中格式化一些日期(我是Coldfusion程序員,所以語法相似,但我卡住了!)。PHP日期格式問題

日期格式完美地顯示我想要的顯示。但是,他們都返回1970年1月1日。

任何人都可以在這個?

爲了背景,我從mySQL的日期時間列中提取日期。原始日期我試圖格式....

2010-04-03 00:00:00

這裏是我使用的代碼行....

$xml_output .= "\t\t<eventdate>" . date("l jS F", $row['event_date']) . "</eventdate>\n"; 

我希望它顯示爲:星期六3月3日

任何幫助,將不勝感激!

西蒙

回答

6

date()的第二個參數需要是UNIX timestamp

轉換你的日期字符串成一個時間戳首先使用strtotime()

$timestamp = strtotime($row["event_date"]); 
echo date("l jS F", $timestamp); // Saturday 3rd April 

手冊頁:

+0

你忘了將'$ timestamp'作爲參數傳遞給'date()' – 2010-02-13 16:42:34

+0

@fireeyedboy謝謝,更正了。 – 2010-02-13 16:43:43

+0

完美,非常感謝你們!正是我需要:) – 2010-02-13 17:00:34

0

使用strftime()功能,您從數據庫中獲取的時間值轉換適合一個Unix時間戳date()

date("l jS F", strtotime($row['event_date'])) 
0

PHP日期函數希望接收Unix時間戳。

將您從數據庫中取出的日期格式更改爲unix時間戳。

2

date功能時用一個UNIX timestamp(即若干秒自1970年1月1日),而不是作爲一個字符串傳遞日期。

這意味着你必須首先你的日期轉換爲時間戳,使用strtotime,例如:

$timestamp = strtotime('2010-04-03 00:00:00'); 

,然後,你可以使用這個時間戳date功能:

echo date('l jS F', $timestamp); 

哪給你你想要的輸出:

Saturday 3rd April 
1

Alternati vely,你可以讓MySQL的format the date爲你檢索(做了更清晰的代碼在構建XML):

在PHP
SELECT 
    event_date, 
    DATE_FORMAT(event_date, '%W %D %M') AS event_date_formatted 
FROM 
    ... 

然後:

$xml_output .= "\t\t<eventdate>" . $row['event_date_formatted'] . "</eventdate>\n"; 

另外:
MySQL的日期格式功能是有點更靈活,因爲它們不依賴於unix時間戳那麼多(如果使用DATETIME字段,那就是)。也許有點不太可能;但如果你的event_date超過了無符號的32位整數時間戳記邊界,那麼你的php的date函數就完全搞砸了。嘗試在1970年1月1日之前或2038年1月19日之前格式化一個日期,你會明白我的意思。

+0

真棒,這可能會快得多的結果返回。我會給它一個去!無論如何,上面的修復時間戳已經解決了問題。但我會更快地將性感的日期直接從mySQL中拿出來:) – 2010-02-13 17:08:41