我的应用程序依赖于日期比较,以便让用户“离线”
这是我的代码:
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)逻辑是,它应该检查每个active clients lastActive属性(它是由心跳更新的)。但有时if不是触发器,因此用户不会被删除。
我一直无法找到为什么有时用户没有被删除,即使超过30分钟已经过去了。
有什么想法可能是错误的,我如何才能确保老用户总是被删除?
发布于 2013-10-08 17:27:54
自动强制转换有时会发生一些奇怪的事情。尝试显式转换为时间戳值并使用这些值。
var d = new Date();
var ts = d.valueOf();
// execute operations发布于 2013-10-08 17:42:11
我建议通过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; //1381225119208https://stackoverflow.com/questions/19243768
复制相似问题