Search code examples
javascriptjquerydatetime

How to run a function at specific time & date?


How can I run a function at a given time and date?

Example: I have a function that needs to run on the 12th of each month at 10AM.

This page will be running 24/7, if this is important.

Obviously I'd have to compare against the current date, but I'm not sure how to check if the current date and time has been matched.


Solution

  • It's not advised to use setInterval because it has non-deterministic behaviour - events can be missed, or fire all at once. Time will fall out of sync, too.

    The code below instead uses setTimeout with a one minute period, where each minute the timer is resynchronised so as to fall as closely to the hh:mm:00.000s point as possible.

    function surprise(cb) {
        (function loop() {
            var now = new Date();
            if (now.getDate() === 12 && now.getHours() === 12 && now.getMinutes() === 0) {
                cb();
            }
            now = new Date();                  // allow for time passing
            var delay = 60000 - (now % 60000); // exact ms to next minute interval
            setTimeout(loop, delay);
        })();
    }