我在php中有关于约会的这个紧急问题。我想在特定日期之前查询数据库中的某些记录,比如我想要在30天内记录,所以首先是我得到当前日期,我想计算日期范围的另一端,我该怎么做?我需要在mysql查询或php中执行此操作吗?非常感谢!
答案 0 :(得分:3)
你可以在mysql中轻松完成。
例如
SELECT * from myTable where date_column > date_sub(now(), interval 30 day);
now()或CURRENT_TIMESTAMP - >会给你一个当前日期的值。
date_sub
和date_add
是用于添加或减去间隔的函数
从给定日期开始。
此处的文档: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
答案 1 :(得分:0)
您可以像这样在PHP中生成当前日期:
$current_date = date("Y-m-d"); // the output will be in the format YYYY-MM-DD
echo $current_date;
您可以在此处了解有关PHP日期和日期格式的更多信息:http://php.net/manual/en/function.date.php
您还可以使用WEEK()和MONTH()从数据库表中选择某些行。昨天我问了一个与之相关的问题:MySQL: Select data from a table where the date falls in the current Week and current Month
希望它能解决你的问题。
答案 2 :(得分:0)
通常认为在PHP中构造区间比使用MySQL的内置函数(例如NOW()
)更好。这是有充分理由的。
假设您使用NOW()
(SELECT t.foo, t.bar FROM table t WHERE created_at > DATE_SUB(NOW(), interval 30 day);
)进行查询。该函数返回一个精度低至最后一秒的日期(例如'2006-04-12 13:47:36'
)。缓存此查询是非常无用的,因为它仅适用于此1秒的时间段。
大多数应用程序几乎不需要这种精确度,通常1天的准确度就足够了。您已经可以看到构建一个精度较低的查询更有益,因为结果是第一次缓存,任何后续查询都会在一天内达到缓存。
这是PHP中的一个例子
$pdo = new \PDO($dsn, $db_user, $db_pass);
$sql = 'SELECT t.foo, t.bar FROM table t WHERE t.created_at >= ?';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, date('Y-m-d', strtotime('-30 days')));
$stmt->execute();
有关PDO的更多信息,请查看documentation