27

我需要根据数据库中的日期时间测试当前时间,如果已经 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

4 回答 4

50

首先转换$timest为时间戳

$time = strtotime($timest);

$curtime = time();

if(($curtime-$time) > 1800) {     //1800 seconds
  //do stuff
}
于 2013-02-01T13:35:22.017 回答
12

全部在 sql 语句中完成

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

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

于 2013-02-01T13:33:52.963 回答
1

在这种情况下,我喜欢使用unix 时间戳。

$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

于 2013-02-01T13:33:09.067 回答
-1
SELECT id FROM dwCache ORDER BY id DESC LIMIT 1

你会得到唯一id的领域,这是第一个。二、时间转换:MySQL convert datetime to Unix timestamp

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

于 2013-02-01T13:29:51.677 回答