2009-01-14 277 views
1

我在我的mysql表中分別有一個datetime列,分別叫做start_datestart_time。我希望我的用戶能夠在start_time分鐘之前X小時前發送自己的提醒。 1小時,最長24小時。MySQL日期/時間計算

我將運行一個CRON腳本來發送這些提醒。現在我做:

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

要獲得所有的拍賣,將開始今天,尚未開始。我的問題是,如何知道現在的時間是否在start_time之前X小時,因此如果是這樣,我可以向他們發送提醒。

有什麼建議嗎?

回答

4

事情是這樣的:

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

是有一些原因,你不能只用而不是一個日期和一個時間一個簡單的時間戳字段。你會發現所有的,在未來的5小時(說)開始的,通過做

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

注意方式:區間語法數據庫之間略有不同,這是一個爲PostgreSQL數據庫,所以你可能要稍微改變它爲MySQL。

0

你可以使用unixtime來節省時間嗎?

由於PHP有一個很棒的功能叫strtotime

在你可以說。 strtotime(「+ 20小時」),並從現在開始獲得20小時的unixtime。

那麼它只是一個問題,哪個領域比另一個更大,如果是的話,發送通知。

+0

爲什麼你會認爲他在運行PHP?首先,他將使用cronjob,這表明它可能不是PHP。第二,爲什麼你需要使用strtotime在幾秒鐘內計算20小時?這是基本的數學... – jishi 2009-01-14 21:03:06

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 
}