2010-09-22 60 views
3

我已經找到了一個適當的解決方案,我的「問題」,但即使在閱讀MySQL頁面後,我不明白其背後的邏輯。MySQL的日期時間到PHP

我目前在我的系統中的一個「datetime」格式的字段中存儲了我的表(YYYY-MM-DD hh:mm:ss)之一中的註冊信息。

當我想在我的一個php頁面上顯示數據時,只需發佈​​確切的字段數據即可顯示上述格式。

簡單地使用date("Y-m-d",$row["DATE"])其中$row["DATE"]對應於特定行值將返回所需的格式THINK。我不得不使用:date("Y-m-d", strtotime($row["DATE"]))

這是爲什麼?我的$row["DATE"]字段首先不是字符串。我應該能夠簡單地重新排列存儲在日期時間字段中的數據嗎?難道這不是重建我的整個桌面來容納日期時間的目的嗎?

回答

5

MySQL有一個名爲date_format的函數,你可以使用它來顯示你想要的日期。

SELECT DATE_FORMAT(date_field, '%Y-%m-%d') as date_field FROM table_name 

該手冊有格式列表和變量需要以這種方式顯示。使用這種方法將不需要PHP將其轉換等等。另外,PHP對於MySQL可以輕鬆處理的東西來說代碼更少。

編輯

不好意思,剛纔看你正在尋找一種解釋。

PHP的date函數需要MySQL不使用的UNIX時間戳。如您所知,MySQL使用真正的日期格式IE:YYYY-MM-DD HH:MM:SS,這將在幾年後才能符合。 UNIX時間戳有一個有限的範圍,從1969到2037這個範圍是有效的,這使得它非常適用於諸如聊天框消息之類的項目的「時間戳」或者它們不應該在這些日期之後發佈的項目,其中因爲MySQL DATETIME不應該消失,直到年份更改爲5位或全球結束。

閱讀WIKI的UNIX timestamp瞭解更多信息。

2

MySQL允許您選擇unix時間戳格式的日期,這使得它們可以更容易地在PHP中使用,完全按照您的要求。

以前的答案似乎忽略了這一點,或淡化它由於對Unix時間戳的範圍限制,但如果它是你在找什麼...

SELECT UNIX_TIMESTAMP(datefield) as u_datefield FROM table 

會給你的日期在時間戳格式,正如你在PHP建議你可以使用:

<?php 
$showdate = date("Y-m-d",$row['u_datefield']); 
?> 

由於以前的答案表明,UNIX時間戳確實有一個有限的範圍內,因此,如果您需要1970年之前或2038之後的日期可能不適合,但今天日常使用它很棒。

對日期字符串使用時間戳的主要優點是可以添加和減去時間戳,這對於字符串格式的日期來說非常困難。