如何编写一个JS脚本来检测用户更改系统时间?
如何编写一个JS脚本来检测用户更改系统时间?
在 JavaScript 中,没有(可移植的)方法来跟踪变量。此外,日期信息不包含在 DOM 中,因此您无法触发 DOM 事件。
最好的方法是使用 setInterval
定期检查(每秒钟?)。示例:
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);
检查一个时间间隔函数,确保时间没有发生太大的变化:
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
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);
performance.now()
获取持续时间,这将独立于系统时钟。var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");
然后,您可以比较performance.now()
的经过时间与Date.now()
的经过时间,以查看它们是否相差太多。
我认为你所要求的问题可能没有解决方案,但是你可以获取用户的时区偏移量。
new Date().getTimezoneOffset() * -1
此函数返回与 GMT 的时差(以分钟为单位)。但请注意,它不考虑夏令时。
你的意思是他们把自己的系统时间改成了错误的时间吗?你可以要求用户提供他们所在的时区,从服务器获取正确的时间,然后将其与用户的系统时间进行比较。
你可以每30秒检查一次,如果新的时间偏差超过30秒+/-某个阈值,你可以进行更详尽的比较来确定它已经改变了多少。