0

私のアプリケーションは、ユーザーを「オフライン」にするために日付比較に依存しています

これは私のコードです:

setInterval(function () {
    for (var s in _client) {
        if (_client.hasOwnProperty(s)) {
            var obj = _client[s];

            var lastVisit = new Date(_client[s].lastActive); // for example: 2013-10-8 9:52:24
            var thirtySecs = 31000;
            var now = new Date();
            var thirtySecsAgo = new Date(now - thirtySecs);


            if (lastVisit < thirtySecsAgo) {
                // Should now remove user
                // This does not always work for some reason
            }
        }
    }
}, 15000)

ロジックは、アクティブな各クライアントの lastActive プロパティ (ハートビートによって更新されている) をチェックする必要があるというものです。ただし、場合によってifはトリガーされないため、ユーザーが削除されません。

30 分以上経過したにもかかわらず、ユーザーが削除されない場合がある理由を見つけることができませんでした。

何が間違っている可能性があり、古いユーザーが常に削除されるようにする方法はありますか?

4

2 に答える 2

1

自動キャストで時々おかしなことが起こる。タイムスタンプ値への明示的な変換を試み、それらを使用します。

var d = new Date();
var ts = d.valueOf();
// execute operations
于 2013-10-08T09:27:54.397 に答える
0

変数nowlastVisit、およびthirdySecsをgetTime()を介してミリ秒に変換することをお勧めします。これにより、それらを符号なし整数として比較しやすくなります。

var lastVisit = (new Date(_client[s].lastActive)).getTime(); //1381215144000
var now = (new Date()).getTime(); //1381225150208    
var thirtySecs = 31*1000; //31000
var thirtySecsAgo = now - thirtySecs; //1381225119208
于 2013-10-08T09:42:11.257 に答える