【问题标题】:PHP: How to calculate time remaining between last insert time and now()PHP:如何计算上次插入时间和现在()之间的剩余时间
【发布时间】:2013-11-30 05:50:01
【问题描述】:

我正在使用以下内容来限制 IP 每 5 分钟发送 1 条消息。 所以我想回显剩余时间,我该如何计算?

这是我的 PHP

$query = "SELECT * FROM messages WHERE ip = '$ip' AND mtime >= NOW() - INTERVAL 5 MINUTE";
$result = mysql_query($query);

if (mysql_num_rows($result) > 0) {
 echo "<script> 
           alert ('You can only send 5 message every 10min. please wait.')
       </script>";
} else {

}

【问题讨论】:

  • 你没有获取数据那么你如何计算剩余时间

标签: php mysql sql datetime time


【解决方案1】:

如果您的 mtime 列包含 microtime 值,您可以这样做:

$query = "SELECT * FROM messages WHERE ip = '$ip' AND mtime >= NOW() - INTERVAL 5 MINUTE ORDER by mtime DESC";
$result = mysql_query($query);

if (mysql_num_rows($result) > 0) {
    $row = mysql_fetch_assoc($result);
    $diff = microtime(true) - $row['mtime']; //here the time difference between last sended message and this try
    $remaining = (5*60 - (int) $diff);
    ...
}
else {
    ...
}

我还更改了查询顺序,以便获得现在和上一条消息之间的差异。如果您以后需要每次检查 5 条消息,则需要删除该订单。

如果微时间不起作用,您可以使用时间功能:

$diff = time() - $row['mtime'];

【讨论】:

  • 可能不是微秒时间,因为当我回显 $remailning 时,我得到这个'-1385789502',那是几秒钟?
  • 是的,这是几秒钟。尝试回显微时间(真)。有效吗?
  • 你可以使用 time() 代替。
  • @Eustatia 我很高兴这对你有用,但我会建议你使用标准 mysql_request 的 PDO,特别是如果你在连接到数据库时使用用户输入数据。这是关于 pdo 的有用链接:net.tutsplus.com/tutorials/php/…
  • 我实际上是在 PDO 上阅读的,我只是不明白,我还是新手,它如何让事情变得更好,或者它是否比我现在使用的更安全?跨度>
【解决方案2】:

像这样在时间戳中首先获取当前时间

$c_time = strtotime(date('d-M-Y g:i:s'));

现在像这样获得超过 5 分钟的时间

$l_time = $c_time-(5*60);

现在提出您的问题

    $query = "SELECT * FROM messages WHERE ip = '$ip' AND mtime >= '$l_time' ORDER by mtime DESC";
$result = mysql_query($query);

if (mysql_num_rows($result) > 0) {
    $row = mysql_fetch_assoc($result);
    $remaining_time = $c_time - $row['mtime']; // this will be remaining time in seconds use it accordingly

    ...
}
else {
    ...
}

希望你能找到答案

【讨论】:

  • 这会返回秒作为另一个答案。
  • 是的,现在您可以将其更改为分钟和秒或您需要的任何时间格式作为剩余时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多