在JavaScript中检测系统时间的更改

时间:2010-07-29 22:33:49

标签: javascript datetime

如何编写脚本来检测用户何时在JS中更改系统时间?

7 个答案:

答案 0 :(得分:8)

没有(便携式)方法来跟踪JavaScript中的变量。此外,日期信息不在DOM中,因此您无法触发DOM事件。

您可以做的最好的事情是使用setInterval定期检查(每秒?)。 Example

function timeChanged(delta) {
  // Whatever
}

setInterval(function timeChecker() {
  var oldTime = timeChecker.oldTime || new Date(),
      newTime = new Date(),
      timeDiff = newTime - oldTime;

  timeChecker.oldTime = newTime;

  if (Math.abs(timeDiff) >= 5000) { // Five second leniency
    timeChanged(timeDiff);
  }
}, 500);

答案 1 :(得分:1)

检查间隔功能时间没有太大变化:

function getTime()  {
  var d = new Date();
  return d.getTime();
}

function checkTime()  {
  if (Math.abs(getTime() - oldtime) > 2000)  {  // Changed by more than 2 seconds?
    alert("You changed the time!");
  }
  oldtime = getTime();
}

var oldtime = getTime();
setInterval(checkTime, 1000);  // Check every second that the time is not off

使用Opera&amp ;;在Windows上测试FF和完美无瑕的工作。

答案 2 :(得分:1)

var last_time = new Date().getTime();
setInterval(function() {
    var time = new Date().getTime();
    var offset = time - last_time;
    if(offset < 0 || offset > 1500) {
        // Time has been changed
    }
    last_time = time;
}, 1000);

从理论上讲,这应该有效。它会每秒检查一次,以确保时间没有改变。请注意,我使用1100毫秒,因为大多数JS解释器不会在指定的时间触发事件。

希望这有帮助!

答案 3 :(得分:0)

你的意思是他们是否将自己的系统时间改为错误的东西?您可以询问用户他们的时区并从服务器获取正确的时间,然后将其与用户的系统时间进行比较。

答案 4 :(得分:0)

不要认为有一个解决方案可以满足您的需求,但您可以获得用户时区偏移量。

new Date().getTimezoneOffset() * -1

这将返回GMT的分钟偏移量。请记住,虽然这不考虑DST。

答案 5 :(得分:0)

您可以每30秒检查一次等。如果新时间超过30秒+/-某个阈值,您可以进行更详尽的比较以确定更改了多少。

答案 6 :(得分:0)

使用performance.now()来获取持续时间,该持续时间与系统时钟无关

请参阅https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");

然后您可以比较performance.now()Date.now()的流逝,看它们是否差异太大。