0

我有一项服务,当会话“准备好”时显示特定按钮,即提前 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 格式。

4

1 回答 1

0

一个可能的问题可能源于与time()时区无关的事实 - 它总是返回 UTC 时间(这一事实隐藏在评论中)。可以使用对象处理更强大的时区处理DateTime

$date = new DateTime('now', new DateTimeZone($_SESSION['timezone']));
$current_time = $date->format("U");

无论哪种方式,下一步都是验证您的$current_time变量并time_from_t查看数学错误的地方。

于 2013-02-01T03:17:06.753 回答