nortex_dev
nortex_dev

Reputation: 241

How to make code execute at each week end?

I want to execute a piece code each Sunday 23:59 (11 pm) (basically at the end of each week). However, it should only be fired once per week.

A setInterval() function won't cut it here, as the app might be restarted meanwhile.

If this will help anyhow, I had this basic idea:

Set an interval (with setInterval) for every 5-10 seconds and check if it's Sunday and hour 23 (11 pm). However, this solution will be inconsistent and may fire more than once a week. I need a more bullet-proof solution to this.

Upvotes: 1

Views: 940

Answers (2)

Yaroslav Gaponov
Yaroslav Gaponov

Reputation: 2099

How about calculating the remaining time on start, like this code

const WEEK_IN_MS = 604800000;
const ONE_HOUR_IN_MS = 3600000;
const FOUR_DAYS_IN_MS = 4 * WEEK_IN_MS / 7;

function nextInterval() {
    return WEEK_IN_MS - ((Date.now() + FOUR_DAYS_IN_MS) % WEEK_IN_MS) - ONE_HOUR_IN_MS;
}

const interval =  nextInterval();

console.log(`run after ${interval} ms`);

setTimeout(
    () => console.log('Do it!!!'),
    interval
)

Upvotes: 0

TAB_mk
TAB_mk

Reputation: 51

You can use any cron module (like https://www.npmjs.com/package/cron) and set job for 59 23 * * 0 (ranges)

const { CronJob } = require('cron');
const job = new CronJob('59 23 * * 0', mySundayFunc);
job.start();

Upvotes: 2

Related Questions