PHP Unix时间戳判断管理员在线:15分钟阈值设置疑问
搞定管理员在线状态判断的问题
嘿,我来帮你把这个问题捋明白!首先敲个关键知识点:$rowAdmins['activity']存储的Unix时间戳,单位绝对是秒——它记录的是从1970年1月1日零点到管理员最后一次活动的总秒数。
那你看到的现有代码里的<60,意思就是「距离最后一次活动还不到60秒」,也就是1分钟内有操作,所以标记为在线。
现在你要实现15分钟无活动就标记离线,先把15分钟转换成秒:15×60=900秒。接下来分两种场景给你调整代码:
场景1:PHP层面判断状态
如果是在PHP里计算时间差来判断在线/离线,代码可以改成这样:
<?php $currentTimestamp = time(); // 获取当前秒级时间戳 $findAdmins = $odb->prepare("SELECT * FROM `users` WHERE `role` = 'admin'"); $findAdmins->execute(); while ($rowAdmins = $findAdmins->fetch(PDO::FETCH_ASSOC)) { // 计算最后活动到现在的间隔秒数 $inactiveDuration = $currentTimestamp - $rowAdmins['activity']; // 15分钟=900秒,间隔小于900秒就是在线 if ($inactiveDuration < 900) { echo "<span style='color: #2ecc71;'>在线</span>"; } else { echo "<span style='color: #e74c3c;'>离线</span>"; } } ?>
场景2:SQL层面直接筛选在线管理员
如果想直接从数据库里只查出15分钟内有活动的管理员,SQL语句可以这么写:
SELECT * FROM `users` WHERE `role` = 'admin' AND `activity` > (UNIX_TIMESTAMP() - 900)
这里UNIX_TIMESTAMP()返回当前秒级时间戳,减去900秒就是15分钟前的时间,只要管理员最后活动时间在这个时间之后,就说明是在线状态。
这样调整后,就能精准实现你要的「15分钟无活动标记离线」的需求啦~
内容的提问来源于stack exchange,提问作者Zac Ram
相关产品推荐
相关产品推荐

