RRULE-inspired recurring event patterns

Import

import { ... } from 'ts-time-utils/recurrence';

Examples

Create Recurrences

Define recurring event patterns

import { createRecurrence, recurrenceToString } from 'ts-time-utils/recurrence';

// Daily recurrence (every 2 days, 10 times)
const daily = createRecurrence({
  frequency: 'daily',
  interval: 2,
  startDate: new Date('2025-01-01'),
  count: 10,
});

console.log(daily.getNextOccurrence(new Date()));
console.log(daily.getAllOccurrences().length); // 10

// Weekly on specific days
const weekly = createRecurrence({
  frequency: 'weekly',
  interval: 1,
  startDate: new Date('2025-01-01'),
  byWeekday: [1, 3, 5], // Mon, Wed, Fri
});

console.log(recurrenceToString(weekly.rule));
// "Every week on Monday, Wednesday, Friday"

// Monthly on the 15th
const monthly = createRecurrence({
  frequency: 'monthly',
  interval: 1,
  startDate: new Date('2025-01-01'),
  byMonthDay: [15],
  until: new Date('2025-12-31'),
});

const inQ2 = monthly.getOccurrencesBetween(
  new Date('2025-04-01'),
  new Date('2025-06-30')
);
console.log(`Q2 occurrences: ${inQ2.length}`); // 3