Мне понадобилась эта функция самостоятельно, наряду с поддержкой часовых поясов, поэтому я создал библиотеку машинописного текста / JavaScript: rSchedule .
В настоящее время поддерживаются все правила повторения ICAL, кроме BYSETPOS, BYWEEKNO и BYYEARDAY. Поддерживает сериализацию в / из формата ICAL вместе с кучей дополнительных вещей.
Пример:
const rule = new RRule({
frequency: 'YEARLY',
byMonthOfYear: [2, 6],
byDayOfWeek: ['SU', ['MO', 3]],
start: new Date(2010,1,7),
}, {
dateAdapter: StandardDateAdapter
})
let index = 0;
for (const date of rule.occurrences()) {
date.toISOString()
index++
if (index > 10) break;
}
rule.occurrences({
start: new Date(2010,5,7),
take: 5
})
.toArray()
.map(date => date.toISOString())