Javascript日期比较并不总是有效

时间:2013-10-08 09:21:09

标签: javascript

我的应用程序依赖于日期比较,以便让用户“脱机”

这是我的代码:

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分钟已经过去。

任何可能出错的想法以及我如何确保始终删除旧用户?

2 个答案:

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