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

我建议通过getTime()将变量nowlastVisit三十秒转换为毫秒,这样将它们作为无符号整数进行比较会更容易:

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 回答