在一天的特定时间调用javascript函数

时间:2014-08-06 19:52:55

标签: javascript time

所以我有以下代码,它适用于一天中的特定时间,例如:下午4点,但我也希望在一天内的其他时间调用此特定功能。

我可能还需要在上午7点,上午11点,或上午7点,上午11点和下午4点拨打电话。任何帮助都会很棒。

setInterval(function interval(){    
    var now = new Date();
    var time = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 14, 0, 0, 0) - now;
    if (time < 0) {
         time += 86400000;
    }    
    setTimeout(function () {
        my_function();
        timeout();
    }, time);
    return interval;
}(),1800000);

2 个答案:

答案 0 :(得分:0)

如何使用此功能:每小时检查当前小时是否与您想要的小时数组匹配,如果匹配,则执行自定义功能

function checkHour(){
    var d = new Date();
    var hours_to_run=[1,13,17,23];
    if(hours_to_run.indexOf(d.getHours()) != -1){
        runCustomFunction();
    }
    setTimeout(checkHour, getMilisecondsLeft());

}

function runCustomFunction(){
    console.log('yay its 1am, 1pm, 5pm or 11pm!!');
}

function getMilisecondsLeft(){
    var d = new Date();
    return 1000*60*60 - (d.getMinutes()*1000*60 + d.getSeconds()*1000+ d.getMilliseconds());    
}

setTimeout(checkHour, getMilisecondsLeft());

答案 1 :(得分:0)

这个怎么样?它会为每个所需的小时计划超时,然后在其中一个超时时间过后重新安排:

function schedule(time) {
    var now = new Date(),
        next = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 
                        time, 0, 0, 0),
        diff = next - now;

    if (diff < 0) {
        diff += 86400000;
    }
    setTimeout(function () {
        my_function();
        schedule(time);
    }, diff);
}

var times = [7, 11, 16];

times.forEach(schedule);