2013-10-06 24 views
2

我需要在我正在處理的網站上顯示DD MMM YYYY格式的日期。我的第一個想法是將日期存儲在MySQL中的DATE類型中,然後使用PHP轉換爲適當的格式。但是,這只是返回01 1970年1月 - 不是實際日期1891年5月4日PHP/MySQL - 以DD MMM YYYY格式處理日期的最佳方法?

我發現了一些其他地方的人問類似的問題和回答總是像SELECT date_format(dt, '%d/%m/%Y')這是給我1891年4月5日。我想要的月份是3個字符(5月,6月,7月,8月等)。

我曾考慮將日期存儲爲VARCHAR,但這似乎是不好的做法。它看起來像我將不得不存儲日期爲一個字符串,將不能夠使用PHP date()函數,因爲它不能處理日期之前,1970年

我可能想要做的事情一樣計算年齡這聽起來處理字符串時很痛苦......我想知道是否有人有更優雅的解決方案?

+0

PHP日期函數在1970年以前的日期沒有問題。您可能在解析日期時做了錯誤的事情。除非您使用的是PHP 5.1.0或更早的版本,但希望情況並非如此,您應該可以使用它。 –

+0

在向MySQL存儲日期時使用'YYYY-MM-DD'格式,並檢索日期......在插入之前在格式之間進行轉換(如果您沒有使用正確的格式,則會得到01-Jan-1970作爲您的日期)或顯示之前 –

回答

4

您可以使用DATE到您的日期保存在您的分貝。

日期從'1000年1月1日' 存儲值'9999-12-31'source

PHP的舊日期函數(即日期()的strtotime())是在32位上,因此僅適用於UNIX時間戳(它們僅限於1970-2038範圍)。

隨着PHP 5的新類DateTime比如,你可以這樣做:

$date = new DateTime("1780-06-01"); 
echo $date->format('Y-m-d H:i:s'); 

編輯: 計算兩個日期之間的差異(如您的問題聲明),一個簡單的方法是:

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%Y years'); 
+2

這裏的意思是MySQL只接受YYYY-MM-DD格式,所以你應該如何插入它。當您選擇它時,您可以根據需要進行格式化。 –

+1

+1這是一個關於php新DateTime()功能的偉大發現! – jacouh

+0

我不知道DateTime。感謝您啓發我並向我展示如何使用它。這已經解決了我的問題。我使用date()和strtotime()這將解釋爲什麼我在70年代陷入困境:( –

0

我總是用一個常量文件....

define('OUTDATE','%d %b %Y'); 
define('INDATE', '%Y-%m-%d'); 

然後(在評論中指出),操作使用常量字符串。

$sql = "SELECT DATE_FORMAT(birthday, ".OUTDATE.") FROM table1"; 
相關問題