1

我现在针对 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';
}
4

4 回答 4

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';
}
于 2013-04-27T17:40:17.467 回答
1

我最近这样做了,像这样:

$time = time();
$last_activity = //time from db
$time_since = $time - $last_activity

$time_since然后根据您的应用程序进行清理。

于 2013-04-27T18:24:30.360 回答
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);

这将允许您确定间隔并使用它进行比较。

于 2013-04-27T17:41:15.460 回答
1

用于DateTime::diff()此:

$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";
}
于 2013-04-27T17:41:22.507 回答