setTimeout延时多久,不一定到时间后就会立即执行,所以需要来修正 setTimeout的时间,使其相对时间是准确的。
let period = 60 * 1000 * 60 * 2let startTime = new Date().getTime()let count = 0let end = new Date().getTime() + periodlet interval = 1000let currentInterval = intervalfunction loop() {count++// 代码执行所消耗的时间let offset = new Date().getTime() - (startTime + count * interval);let diff = end - new Date().getTime()let h = Math.floor(diff / (60 * 1000 * 60))let hdiff = diff % (60 * 1000 * 60)let m = Math.floor(hdiff / (60 * 1000))let mdiff = hdiff % (60 * 1000)let s = mdiff / (1000)let sCeil = Math.ceil(s)let sFloor = Math.floor(s)// 得到下一次循环所消耗的时间currentInterval = interval - offsetconsole.log('时:'+h, '分:'+m, '毫秒:'+s, '秒向上取整:'+sCeil, '代码执行时间:'+offset, '下次循环间隔'+currentInterval)setTimeout(loop, currentInterval)}setTimeout(loop, currentInterval)
