every.other.day.at("12:00").do(async () => console.log("Hello"))everytime.js is a library that helps you schedule functions to run repeatedly. Also available in Python.
import { every } from "everytime.js"
async function greet() {
console.log("Hello")
}
every(5).days.do(greet)everytime.js can be installed from npmjs with
npm i everytime.js
Normally, you will use the do-function to schedule functions.
every(5).seconds.do(greet)You can wrap the everytime expression into a call to schedule.
schedule(every.day.at("12:00"))(greet)This allows you to pass custom datetime iterables to schedule (see Schedule custom times).
schedule accepts datetime iterables. The following schedule works:
schedule([dayjs(), dayjs().add(1, "day")])Keep in mind that Decorators are an experimental feature and may be subject to change.
Decorators only work for methods and not for free functions. Therefore you have to wrap functions in a class to use the run decorator.
class C {
@run(every.second)
static f() {
console.log("hello")
}
}Every time unit can be quantified by every, every.other or every(n):
every.secondevery.other.secondevery(5).seconds
The supported time units are
millisecondsecondminutehourdayweek
All everytime expressions are datetime iterables of type Iterable<Dayjs>.
To change the scheduling, modify these enumerations with the following functions.
every.hour.filter((datetime: Dayjs) => datetime.hour() < 10).do(greet)will schedule the function hourly, but only betweeen 0:00 and 9:59.
every.hour.map((datetime: Dayjs) => datetime.startOf("hour"))will schedule the function hourly, but ensures that the function will run at the start of the hour at minute 0.
every.day.at("12:00").take(10).do(greet)will schedule the function daily at 12:00 for the next 10 days (and then terminate).
day can be scheduled for a specific time of the day:
every.day.at("12:15")(Note that hour is 24-hour based)
everytime.js uses setTimeout to schedule functions and the Day.js library to calculate time differences.
Normally, the process will run forever (because expressions like every.day describe infinitely many datetimes). If you use a finite custom iterable with schedule, the process will terminate accordingly.