我试图弄清楚如何在1:00,1:10,1:20,1:30 ......整天运行一个函数,无论页面最初加载的时间是什么时候。我知道如何使用setInterval
使其每10分钟运行一次,但是如何将第一次执行同步到正确的时间以实现我想要做的事情?例如,如果页面是在1:27加载的,我希望第一次执行发生在1:30,然后是下一次在1:40,下一次在1:50,等等。
有谁知道怎么做?
答案 0 :(得分:4)
var d = new Date();
var epoch = d.getTime() / 1000;
var secondsSinceLastTimerTrigger = epoch % 600; // 600 seconds (10 minutes)
var secondsUntilNextTimerTrigger = 600 - secondsSinceLastTimerTrigger;
setTimeout(function() {
setInterval(myFunction, 600*1000);
myFunction();
}, secondsUntilNextTimerTrigger*1000);
答案 1 :(得分:0)
http://shawnchin.github.io/jquery-cron/
Cron的工作!我会说更多,但链接的网站甚至会为您生成模式。
答案 2 :(得分:0)
计算加载页面和第一个纪元之间的剩余时间。使用setTimeout
执行以此时间间隔运行的setInterval
。
答案 3 :(得分:0)
我说要等到下一个10分钟的时间。然后,设置setTimeout
以开始您的间隔:
var now = new Date();
var min = now.getMinutes();
var startIn = 10 - (min % 10);
console.log('Start in ' + startIn + ' minutes');
setTimeout(runInterval, startIn * 60 * 1000);
function runInterval() {
setInterval(function() {
console.log('run');
}, 10 * 60 * 1000);
}
答案 4 :(得分:0)
这是一个计算以毫秒为单位的增量直到下一个10分钟边界的函数:
function calcTimeToNextTenMinuteBoundary() {
var now = new Date();
var next = new Date();
next.setSeconds(0);
next.setMilliseconds(0);
var tenPeriodStart = Math.round(now.getMinutes() / 10) * 10;
next.setMinutes(tenPeriodStart + 10);
// return ms to next 10 minute boundary
return next - now;
}
您可以随时拨打此电话,了解为下一个计时器设置的时间。最好不要使用setInterval()
,而是为每个下一个计时器设置一个新的setTimeout()
,这样就不会随着时间累积错误。
因为这会使用Date()
对象及其分钟计算,所以它甚至会考虑偶尔添加到给定年份的闰秒,这会从纪元开始时间的直接计算中获胜帐户。
工作演示:http://jsfiddle.net/jfriend00/zhwLbre7/(你必须等到下一个10分钟的时间边界才能看到任何东西)。