2013-01-31 51 views
0

我有一个服务,当会话“准备就绪”时,即15分钟之前,通过会话显示特定按钮。根据UNIX时间戳选择即将到来的会话

我这样做是通过拉起所有最近请求的会话,分析它们的时间戳,然后在会话即将到来时拉出一个特定的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格式。

回答

0

time()与时区无关 - 它始终返回UTC时间(此事实埋在the comments中),可能会出现一个可能的问题。时区的更强大的处理可以与DateTime对象进行处理:

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

无论哪种方式,下一步将是验证$current_time变量和time_from_t,看看那里的数学是怎么了。

+0

那么,'time()'返回一个* UNIX时间戳*,它根据定义是独立于时区的。这个事实不需要评论。开始时没有像* timezone相关的UNIX时间戳*这样的事情。 – deceze