【问题标题】:Comparing timestamp to current time from database将时间戳与数据库中的当前时间进行比较
【发布时间】:2013-01-16 19:50:32
【问题描述】:

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

抱歉重复发帖,其他已删除。

【问题讨论】:

    标签: php


    【解决方案1】:

    首先将$timest转换为时间戳

    $time = strtotime($timest);
    
    $curtime = time();
    
    if(($curtime-$time) > 1800) {     //1800 seconds
      //do stuff
    }
    

    【讨论】:

    • 是 1800 秒、分钟还是小时?
    • 秒,但所有这些日期的多次转换都是浪费时间/资源,因为您可以在查询中完成所有操作,然后只取回您需要处理的 ID 列表。
    【解决方案2】:

    全部在sql语句中完成

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

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

    【讨论】:

      【解决方案3】:

      我喜欢在这种情况下使用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点赞!

      【讨论】:

      • 仅供参考:出于 SQL 注入原因,您应该不使用这种方法在 2020 年
      【解决方案4】:
      SELECT id FROM dwCache ORDER BY id DESC LIMIT 1
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 2017-05-04
        • 2013-10-09
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        相关资源
        最近更新 更多