Fire event at a certain time of the day

前端 未结 4 1390
一整个雨季
一整个雨季 2020-12-31 08:08

Is it possible with javascript (jQuery solutions are fine too) to fire an event/call a function at certain times of the day e.g.

call myFunctionA at 10:00

ca

相关标签:
4条回答
  • 2020-12-31 08:25
    • Get current time
    • Get in milliseconds, the time difference between next execution time minus current time
    • Settimeout with result millisecons
    0 讨论(0)
  • 2020-12-31 08:28
     /**
                 * This Method executes a function certain time of the day
                 * @param {type} time of execution in ms
                 * @param {type} func function to execute
                 * @returns {Boolean} true if the time is valid false if not
                 */
                function executeAt(time, func){
                    var currentTime = new Date().getTime();
                    if(currentTime>time){
                        console.error("Time is in the Past");
                        return false;
                    }
                    setTimeout(func, time-currentTime);
                    return true;
                }
    
                $(document).ready(function() {
                    executeAt(new Date().setTime(new Date().getTime()+2000), function(){alert("IT WORKS");});
                });
    
    0 讨论(0)
  • 2020-12-31 08:35

    I ran into this problem and came up with a more elaborate solution. The basic idea is the same as in the other answers: use setTimeout() with an interval from now to the desired time point.

    Other details used here: if the time point is in the past, schedule it for tomorrow (at time point + 24 hours). Trigger the function at the given time point every day from now using setInterval(). Note: DST is not considered here.

    Input params:
    time = '16:00';
    triggerThis = function() { alert('this was triggered'); };

      scheduleWarning(time, triggerThis) {
    
        // get hour and minute from hour:minute param received, ex.: '16:00'
        const hour = Number(time.split(':')[0]);
        const minute = Number(time.split(':')[1]);
    
        // create a Date object at the desired timepoint
        const startTime = new Date(); startTime.setHours(hour, minute);
        const now = new Date();
    
        // increase timepoint by 24 hours if in the past
        if (startTime.getTime() < now.getTime()) {
          startTime.setHours(startTime.getHours() + 24);
        }
    
        // get the interval in ms from now to the timepoint when to trigger the alarm
        const firstTriggerAfterMs = startTime.getTime() - now.getTime();
    
        // trigger the function triggerThis() at the timepoint
        // create setInterval when the timepoint is reached to trigger it every day at this timepoint
        setTimeout(function(){
          triggerThis();
          setInterval(triggerThis, 24 * 60 * 60 * 1000);
        }, firstTriggerAfterMs);
    
      }
    
    0 讨论(0)
  • 2020-12-31 08:50

    4html:

    current date: <span id="cd"></span><br />
    time to Alarm: <span id="al1"></span><br />
    alarm Triggered: <span id="al1stat"> false</span><br />
    

    javascript:

    var setAlarm1 = "14"; //14:00, 2:00 PM
    var int1 = setInterval(function(){
        var currentHour = new Date().getHours();
        var currentMin = new Date().getMinutes();
        $('#cd').html(currentHour + ":" + currentMin );
        $('#al1').html(setAlarm1 - currentHour + " hours");
            if(currentHour >= setAlarm1){
                $('#al1stat').html(" true");
                clearInterval(int1);
                //call to function to trigger : triggerFunction();
            }
        },1000) //check time on 1s
    

    Sample at: http://jsfiddle.net/yhDVx/4/

    0 讨论(0)
提交回复
热议问题