2011-02-23 109 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