在PHP方面,我是一个非常新手的程序员。我经常可以处理我遇到的大多数问题,但是这个问题我很难过。
我正在尝试创建一个程序,用户可以在其中插入名称,插入后30分钟,名称将被标记为“已过期”。我能够在MySql中创建行并使用MySql我可以输入输入名称的时间。现在我要做的是从数据库中抽出时间并检查它是否已经输入30分钟。
我想我可以通过从数据库中抽出时间,添加30分钟,然后检查当前时间来查看它是否已过去。
这是我到目前为止所拥有的。时间是这种格式:2013-08-21 13:18:35
$result = mysqli_query($con,"SELECT * FROM list ORDER BY id desc");
// snip snip
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
}
任何帮助都将不胜感激。
答案 0 :(得分: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。
答案 1 :(得分:0)
首先,避免选择*
Mysql解决方案是在30分钟后返回时间作为列
SELECT TIMESTAMPADD(MINUTE,30,date1);
假设date1是您的列名,请避免使用日期作为列名,最好是维护问题
答案 2 :(得分:0)
考虑$row['date']
打印2013-08-21 13:18:35
。您需要使用 strtotime()将该值转换为时间戳。
请参阅此处的文档strtotime。
现在你有了一个时间戳,你只需要加上1800秒(半小时)即可获得所需的时间。
然后,您的时间与现在之间的简单比较(您使用时间()获得值)将为您提供结果。
这段代码仅仅是一个例子(甚至过于详细,因为它可以更短):
$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";