根据UNIX时间戳选择即将到来的会话

时间:2013-01-31 23:17:10

标签: php unix unix-timestamp

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

1 个答案:

答案 0 :(得分:0)

time()与时区无关的事实可能会产生一个问题 - 它总是返回UTC时间(这个事实隐藏在the comments中)。使用DateTime对象可以处理更加强大的时区处理:

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

无论哪种方式,下一步都是验证您的$current_time变量和time_from_t以查看数学出错的位置。