如何每10分钟运行一次功能,10分钟,每小时6次?

时间:2015-02-16 00:00:26

标签: javascript

我试图弄清楚如何在1:00,1:10,1:20,1:30 ......整天运行一个函数,无论页面最初加载的时间是什么时候。我知道如何使用setInterval使其每10分钟运行一次,但是如何将第一次执行同步到正确的时间以实现我想要做的事情?例如,如果页面是在1:27加载的,我希望第一次执行发生在1:30,然后是下一次在1:40,下一次在1:50,等等。

有谁知道怎么做?

5 个答案:

答案 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分钟的时间边界才能看到任何东西)。