mi-cron is a microscopic (~1KB minified & gzipped) parser for standard cron expressions.
@daily
) and steps (*/10
)npm i @cheap-glitch/mi-cron
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron.nextDate('*/5 6-12 3 3 *').toUTCString());
// Wed, 03 Mar 2021 06:00:00
Parses a standard cron expression. Supports:
*
)0-30
, mon-fri
)*/3
, 20-31/2
, 10/5
)1,15
, 0-10,20-30/2
)@weekly
)Does NOT support:
L
, W
, #
, ?
, H
@reboot
Returns an object with all possible values for each field (minutes, hours, days,
months and days of the week), or undefined
if the expression is invalid (wrong
syntax, unsupported instruction, impossible range, etc).
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron('*/5 6-10 1,15 * wed'));
// {
// minutes: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],
// hours: [6, 7, 8, 9, 10],
// days: [1, 15],
// months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
// weekDays: [3],
// }
Takes a cron schedule or expression and returns the next date that matches the
schedule, or undefined
if the expression is invalid. If given a datetime as
the second argument, it will start the computation from this time (otherwise it
will use the current datetime at the moment it's called).
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron.nextDate('* * * * *', new Date('01 Jan 2020 00:00:00 GMT')).toUTCString());
// Wed, 01 Jan 2020 00:01:00
// Get the next five scheduled dates
const schedule = parseCron('@weekly');
const nextDate = new Date();
for (let i=0; i<5; i++) {
console.log(nextDate = parseCron.nextDate(schedule, nextDate));
}
See the full changelog here.
Contributions are welcomed! Please open an issue before submitting substantial changes.
ISC