1

データベースからのタイムスタンプを使用して、DateTime NOW に対してオンライン/オフライン関数をテストしています。

しかし、インターバル時間を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

考えられる解決策の 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 に答える
1

私は最近、次のようにこれを行いました:

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

$time_since次に、アプリケーションに必要な場合はクリーンアップします。

于 2013-04-27T18:24:30.360 に答える