2013-02-01 83 views
22

我需要根據數據庫中的日期時間測試當前時間,如果它已經過了30分鐘,那麼執行代碼,如果沒有,則不要。這是我在哪裏,我卡住:將時間戳與數據庫中的當前時間進行比較

$link = mysqli_connect("hostname", "username", "password", "database"); 
$q = "SELECT id FROM dwCache ORDER BY id DESC LIMIT 1"; 
$qu = mysqli_query($link, $q); 

while($row=mysqli_fetch_array($qu, MYSQL_ASSOC)){ 
     $id = $row['id']; 
     $cache = $row['cache']; 
     $timest = $row['time']; 
    } 

$newTime = 
$difference = $timest 
if($timest >=) 

正如你可以對我失去了它的底部看到,因爲我不知道該怎麼做。

$timest回報:2013-02-01 12:36:01作爲格式Y-m-dh-i-s

道歉上雙崗,其他刪除。

回答

37

先轉換$ timest爲timestamp

$time = strtotime($timest); 

$curtime = time(); 

if(($curtime-$time) > 1800) {  //1800 seconds 
    //do stuff 
} 
+0

是1800秒,分鐘或小時? –

+0

秒,但所有這些多次轉換日期都是浪費時間/資源,因爲當您可以在查詢中完成所有操作時,只需返回需要處理的ID列表即可。 – Dave

-1
SELECT id FROM dwCache ORDER BY id DESC LIMIT 1 

你只會得到id字段,這是第一個。 第二,時間轉換:MySQL convert datetime to Unix timestamp

第三:你可以使用strtotime函數轉換你的時間字符串。

2

我喜歡在這種情況下使用unix timestamps

$timest = date('u'); // gets the unix timestamp 
$q = "SELECT id 
     FROM `dwCache` 
     WHERE {$timest} - UNIX_TIMESTAMP(`timestamp_col`) > 1800"; 

說明:

這基本上計算當前時間和在表列的時間之間的差。如果它高於1800(30分鐘),它將選擇該行,並且您的PHP代碼將被執行。

優勢

有一些優勢,使用這種替代的PHP檢查你開始做。您將選擇更少的行,從而佔用更少的內存。

PS:

豎起大拇指使用MySQLi

9

做這一切在SQL語句

SELECT id FROM `dqCache` WHERE `time`<DATE_SUB(NOW(), INTERVAL 30 MINUTE); 

這將從表中返回的一切,其中的時間列前30分鐘前,現在。

相關問題