如何编写脚本来检测用户何时在JS中更改系统时间?
答案 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()
的流逝,看它们是否差异太大。