我正在使用数据库中的时间戳来测试一个在线/离线功能,而不是现在的DateTime。
但我无法弄清楚如何设置间隔时间,比如5分钟。 如果用户在5分钟内没有做任何事情,则显示为离线。
DateTime NOW将始终大于数据库时间。 关于如何在声明中设置间隔时间的任何想法?
这是我到目前为止所拥有的,
// $user_info['activity'] 2013-04-27 19:27:39 //
$dateTime = new DateTime("now", new DateTimeZone('Europe/Warsaw'));
if($user_info['activity']>$dateTime){
echo 'user Online';
}else{
echo 'user inactive';
}
答案 0 :(得分:3)
这可能有用吗
$now = new DateTime(null, new DateTimeZone('Europe/Warsaw'));
$last_activity = new DateTime($user_info['activity']);
$last_activity->modify('+5 minutes');
if($now > $last_activity){
echo 'user inactive';
}else{
echo 'user online';
}
答案 1 :(得分:1)
一种可能的解决方案是将数据库时间戳更改为DateTime对象,然后使用DateTime::diff()方法进行比较。
$dateTime1 = new DateTime(strtotime($user_info['activity']), new DateTimeZone('Europe/Warsaw'));
$dateTime2 = new DateTime("now", new DateTimeZone('Europe/Warsaw'));
$interval = $dateTime1->diff($dateTime2);
这将允许您确定间隔并使用它进行比较。
答案 2 :(得分:1)
$now = new DateTime();
$activity = $user_info['activity'];
// get difference between the two dates
$difference = $now->diff($activity);
// ->i contains the minutes
if($difference->i >= 5) {
echo "logged out";
}
答案 3 :(得分:1)
我最近这样做了,就像这样:
$time = time();
$last_activity = //time from db
$time_since = $time - $last_activity
然后,如果您的申请需要,请清理$time_since
。