MySQL日期/时间计算

时间:2009-01-14 20:31:56

标签: php mysql datetime

我的mysql表中有datetime列,分别名为start_datestart_time。我希望我的用户能够在start_time,min之前X小时发送自己的提醒。 1小时,最长24小时。

我将运行CRON脚本来发送这些提醒。现在我做:

SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0'

获得今天开始并尚未开始的所有拍卖。我的问题是,如何确定现在的时间是X之前的start_time小时,以便我可以向他们发送提醒信息。

有任何建议吗?

4 个答案:

答案 0 :(得分:4)

这样的事情:

SELECT col1, col2, col3 
FROM records 
WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR)) 
AND (records.status = '0');

答案 1 :(得分:2)

是否有一些原因可以解释为什么你不能只使用一个简单的时间戳字段而不是一个用于日期和一个用于时间。通过这种方式你可以找到所有在接下来的5个小时内开始的(比如说)

select * from auctions where start_ts between now() and now() + interval '5 hours';

注意:数据库之间的间隔语法略有不同,这就是postgresql的语法,因此您可能需要稍微更改一下mysql。

答案 2 :(得分:1)

在发送所有答案及其工作之前,我实际上是这样做的。因为我在截止日期前不能回去改变它:)

$sql="SELECT HOUR(ADDTIME(CURTIME(),'$hour')) as remindHour, HOUR(CURTIME()) as curHour";
$result=$this->db->query($sql);

extract($result->getAllSingle());

if ($remindHour <=$curHour) {
    // Send reminders
}

答案 3 :(得分:0)

你能用unixtime节省时间吗?

因为PHP有​​一个很棒的函数叫strtotime

你可以说。 strtotime(“+ 20小时”)并从现在起20小时内获得unixtime。

然后它只是哪个字段比另一个字段大,如果是,则发送通知。