我有一个服务,当会话"准备就绪"时,即在会话前 15 分钟和整个会话期间显示一个特定的按钮。
我通过拉出所有最近请求的会话,分析它们的时间戳,然后在该会话即将到来时拉出一个特定的 ID 来做到这一点。这是代码:
$session_check_query = "SELECT * FROM requested_sessions WHERE username_t = '{$_SESSION['username']}'";
$session_check_process = mysql_query($session_check_query);
date_default_timezone_set($_SESSION['timezone']);
$current_time = time();
while ($sessions = mysql_fetch_array($session_check_process)) {
if ($sessions['time_from_t'] - $current_time <= 900 && $current_time - $sessions['time_from_t'] > 0 && $sessions['accepted'] == 1) {
$session_id = $sessions['id'];
}
}
问题是当我在循环中回显 $session_id 时,它将输出 1、2、3、4。这意味着感觉我在数据库中的所有会话都符合此标准,而它们不仅符合一个会话。
此代码有问题吗? time_from_t采用 UNIX 格式。
一个可能的问题可能是time()
与时区无关 - 它总是返回 UTC 时间(这一事实隐藏在注释中)。可以使用DateTime
对象处理更强大的时区处理:
$date = new DateTime('now', new DateTimeZone($_SESSION['timezone']));
$current_time = $date->format("U");
无论哪种方式,下一步都是验证您的$current_time
变量和time_from_t
,以查看数学出了问题。