我的应用程序依赖于日期比较,以便让用户“脱机”
这是我的代码:
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分钟已经过去。
任何可能出错的想法以及我如何确保始终删除旧用户?
答案 0 :(得分:1)
自动演员有时会发生奇怪的事情。尝试显式转换为时间戳值并使用它们。
var d = new Date();
var ts = d.valueOf();
// execute operations
答案 1 :(得分:0)
我建议通过 getTime()将变量 now , lastVisit 和 thirtySecs 转换为毫秒,这样它就会更容易将它们作为无符号整数进行比较:
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