2013-02-01 48 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分钟前,现在。

相关问题