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.second
every.other.second
every(5).seconds
The supported time units are
millisecond
second
minute
hour
day
week
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.