2011-02-23 99 views
4

像許多人一樣,我完全被PHP和MySQL中的許多日期函數所困惑。我需要的是能夠在MySQL中存儲日期,並能夠以可讀的格式在屏幕上查看它,使用標準Web表單在月份,年份或兩者上進行搜索,或者對其進行排序數月或數年。PHP/MySQL的存儲和搜索日期

示例搜索將是過去5年中febuary的所有記錄。

我有一個javascript日曆,輸入表格中的月份作爲02-12-2011。

什麼是最好的格式來使用這個。 MySQL中該字段應該是什麼。

感謝

回答

1

在MySQL的列類型應該是date

+0

所以在PHP端你需要將其轉換爲你想要的格式將被格式化爲'YYYY-MM-dd'(你可以做到這一點在MySQL太直接,但一般你不想這樣做,除非你需要在查詢中直接執行某種日期數學/比較) – prodigitalson 2011-02-23 02:18:53

0

這是一個日期,因此將其存儲爲DATE列。您可以在SQL查詢中使用UNIX_TIMESTAMP()或在PHP中使用strtotime,將其轉換回可以傳遞給php date()函數的值,以輸出任何您想要的格式日期。

3

請使用DateTime對象。

將日期存儲在mysql中作爲DATE格式。

寫入數據時

$date = new DateTime($_POST['date']); 

or 

$date = DateTime::createFromFormat('d-m-Y', $_POST['date']); 

$query = sprintf("INSERT INTO `data` SET `date` = '%s'", $date->format('Y-m-d')) 

當讀取數據營造一個DateTime對象。

$date = new DateTime($row['date']); 

然後你可以用任何你想要的格式打印它,你的JavaScript的格式:

echo $date->format('d-m-Y'); 

http://www.php.net/manual/en/class.datetime.php

和日期格式:

http://www.php.net/manual/en/function.date.php

至於搜索去,你可以在字段中使用MySQL的日期函數。

對於過去5年2月的所有記錄。

SELECT * FROM `data` WHERE MONTH(`date`) = 2 AND YEAR(`date`) >= YEAR(NOW()) - 5 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

+0

另外,請注意'DateTime'類僅適用於PHP> = 5.3.0 – galymzhan 2011-02-23 03:52:35

+0

它實際上在5.2以後可用,但是其中一些功能是5.3+ – Jacob 2011-02-23 03:55:47

+0

這就是我所擁有的功能,但它引起了一些問題,這就是我問的原因。首先:MySQL將日期存儲爲YYYY-MM-DD,javascript將其輸入爲DD-MM-YYYY(這正是我所希望的)。我正在轉換它,但真正的痛苦。另一個問題是這個。在這可能是一個空的領域,我希望它只是空的,但我猜是因爲它是一個日期字段,如果沒有什麼東西,它會自動輸入0000-00-000,這會混淆視聽。 – confused 2011-02-23 08:05:12