quartzcron
Version:
version: `0.1.0` [CHANGELOG](https://github.com/fedeghe/quartzcron/blob/master/CHANGELOG.md)
41 lines (36 loc) • 1.3 kB
JavaScript
/*
quartzcron (v.0.1.0)
*/
const {
solve_dom,
solve_dow,
} = require('./dateutils');
function* generateDates(base, years, months, dom, dow, hours, minutes, seconds) {
for (const year of years)
for (const month of months)
yield* generateDatesForMonth(base, year, month, dom, dow, hours, minutes, seconds);// month is 1-based
}
function* generateDatesForMonth(base, year, month, dom, dow, hours, minutes, seconds) {
let daysInMonth;
if (dom !== '?') {
daysInMonth = solve_dom(year, month, dom);
} else
/* istanbul ignore else */
if (dow !== '?') {
daysInMonth = solve_dow(year, month, dow);
}
for (let i = 0, l = daysInMonth.length; i < l; i++)
yield* generateDatesForDay(base, year, month, daysInMonth[i], hours, minutes, seconds);
}
function* generateDatesForDay(base, year, month, day, hours, minutes, seconds) {
for (const hour of hours)
for (const minute of minutes)
for (const second of seconds) {
/* istanbul ignore else */
if (+base < Date.UTC(year,month-1, day, hour , minute, second))
yield new Date(Date.UTC(year, month-1, day, hour, minute, second)); // month is 0-based here
}
}
module.exports = {
generateDates
};