0

当谈到 PHP 时,我是一个非常菜鸟的程序员。我通常可以处理我遇到的大多数问题,但是对于这个我很难过。

我正在尝试创建一个程序,用户可以在其中将名称插入表中,插入后 30 分钟,该名称将被标记为“过期”。我可以在 MySql 中创建行并使用 MySql 我可以输入输入名称的时间。现在我要做的是从数据库中获取时间并检查它是否已经 30 分钟,因为它被输入。

我想我可以通过从数据库中获取时间,添加 30 分钟,然后检查当前时间以查看它是否已经过去来做到这一点。

这就是我到目前为止所拥有的。时间格式如下:2013-08-21 13:18:35

$result = mysqli_query($con,"SELECT * FROM list ORDER BY id desc");

//截图截图

while($row = mysqli_fetch_array($result))
            {

            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['username'] . "</td>";
            echo "<td>" . $row['reason'] . "</td>"; 
            echo "<td>" . $row['date'] . "</td>"; 
            cho "</tr>";

                }

现在我知道我需要花费 $row['date'] 并添加 30 分钟。我可能已经阅读了大约 20 个不同的页面,但我所做的似乎没有任何效果。

我已经看到了一些不同的建议,例如 date_add() 和 strtotime 但要么我做错了,要么它不起作用。

如果我能得到一个工作代码示例,说明如何将 30 分钟添加到 $row['date'],我相信我可以向自己解释。

一旦添加了 30 分钟,我就知道如何比较两者,我认为这是正确的:

if ($time30 < $now) {
// Code to execute
}

任何帮助,将不胜感激。

4

3 回答 3

0

一、避免选择 *

Mysql 解决方案是将 30 分钟后的时间作为一列返回

选择时间戳(分钟,30,日期1);

假设 date1 是您的列名,避免使用 date 作为列名,充其量是维护问题

于 2013-08-21T18:46:45.497 回答
0

Considering that $row['date'] prints out 2013-08-21 13:18:35. you need to use strtotime() to convert that value into a timestamp. See documentation here strtotime.

Now that you have a timestamp, you simply add 1800 seconds to it (half an hour) and you obtain what you need.

Then, a simple comparison between your time and now (you obtain the value with time() ) will give you the result.

This code is a mere example (even too much detailed, because it can be shorter):

$db_time = strtotime("2013-08-21 20:18:35");
$half_hour = 1800;

$time = $db_time + $half_hour;

if($time < time()) echo "expired"; else echo "active";
于 2013-08-21T18:47:37.377 回答
0

在 PHP 中:

$time30 = strtotime($row['date']) + (30 * 60);
$now = time();

在 MySQL 中

SELECT *,timestampadd(minute,30,date)<now() as expired FROM list ORDER BY id DESC

然后在 PHP 中你有$row['expired']一个 1 或 0。

于 2013-08-21T18:45:33.557 回答