根据 UNIX 时间戳选择即将开始的会话


Selecting upcoming sessions based on UNIX timestamps

我有一个服务,当会话"准备就绪"时,即在会话前 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,以查看数学出了问题。