将时间戳与数据库中的当前时间进行比较

时间:2013-02-01 13:27:18

标签: php

我需要针对数据库中的日期时间测试当前时间,如果已经过了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-d h-i-s

双重道歉,其他删除。

4 个答案:

答案 0 :(得分:41)

首先将$timest转换为时间戳

$time = strtotime($timest);

$curtime = time();

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

答案 1 :(得分:10)

在sql语句中完成所有操作

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

这将返回表中时间列之前30分钟之前的所有内容。

答案 2 :(得分: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

答案 3 :(得分:-1)

SELECT id FROM dwCache ORDER BY id DESC LIMIT 1

你只会获得id字段,这是第一个。 第二个,时间转换:MySQL convert datetime to Unix timestamp

第三:您可以使用strtotime函数转换时间字符串。