Libraries
    Preparing search index...

    Iterates over the dates defined by a Schedule.

    Given a schedule configuration (e.g. every 2 days, every week on Monday/Friday, every month on the 15th) the calculator produces the sequence of Date objects that match that schedule. Use hasNext / next to walk through the sequence.

    const calc = new ScheduleCalculator({
    every: 'day',
    interval: 1,
    hour: 9,
    minute: 0,
    startsOn: new Date('2025-01-01T00:00:00Z'),
    maxOccurences: 5
    });

    while (calc.hasNext()) {
    const { date, index } = calc.next();
    console.log(`Run #${index} at ${date.toISOString()}`);
    }
    Index

    Constructors

    Methods

    Constructors

    • Parameters

      • schedule:
            | {
                endsOn?: Date;
                every: "minute";
                interval: number;
                maxOccurences?: number;
                skipFirst?: number;
                startsOn?: Date;
            }
            | {
                endsOn?: Date;
                every: "day";
                hour?: number;
                interval: number;
                maxOccurences?: number;
                minute?: number;
                skipFirst?: number;
                startsOn?: Date;
            }
            | {
                dayOfWeek: number[];
                endsOn?: Date;
                every: "week";
                hour?: number;
                interval: number;
                maxOccurences?: number;
                minute?: number;
                skipFirst?: number;
                startsOn?: Date;
            }
            | {
                day: number
                | "last";
                endsOn?: Date;
                every: "month";
                hour?: number;
                interval: number;
                maxOccurences?: number;
                minute?: number;
                skipFirst?: number;
                startsOn?: Date;
            }
            | {
                day: number
                | "last";
                endsOn?: Date;
                every: "year";
                hour?: number;
                interval: number;
                maxOccurences?: number;
                minute?: number;
                month: number;
                skipFirst?: number;
                startsOn?: Date;
            }

        The schedule definition to iterate over.

        • {
              endsOn?: Date;
              every: "minute";
              interval: number;
              maxOccurences?: number;
              skipFirst?: number;
              startsOn?: Date;
          }
          • OptionalendsOn?: Date

            Do not repeat after this date

          • every: "minute"

            Repeat every minute

          • interval: number

            Number of intervals (days, months, minutes or weeks) between repeats. Interval type depends of every value

          • OptionalmaxOccurences?: number

            Max number of repeats (min 1)

          • OptionalskipFirst?: number

            Skip this number of repeats. Min value is 1.

          • OptionalstartsOn?: Date

            Do not start earlier than this date

        • {
              endsOn?: Date;
              every: "day";
              hour?: number;
              interval: number;
              maxOccurences?: number;
              minute?: number;
              skipFirst?: number;
              startsOn?: Date;
          }
          • OptionalendsOn?: Date

            Do not repeat after this date

          • every: "day"

            Repeat every day

          • Optionalhour?: number

            Hour (0-23)

          • interval: number

            Number of intervals (days, months, minutes or weeks) between repeats. Interval type depends of every value

          • OptionalmaxOccurences?: number

            Max number of repeats (min 1)

          • Optionalminute?: number

            Minute (0-59)

          • OptionalskipFirst?: number

            Skip this number of repeats. Min value is 1.

          • OptionalstartsOn?: Date

            Do not start earlier than this date

        • {
              dayOfWeek: number[];
              endsOn?: Date;
              every: "week";
              hour?: number;
              interval: number;
              maxOccurences?: number;
              minute?: number;
              skipFirst?: number;
              startsOn?: Date;
          }
          • dayOfWeek: number[]

            Days of week for schedule

          • OptionalendsOn?: Date

            Do not repeat after this date

          • every: "week"

            Repeat every week

          • Optionalhour?: number

            Hour (0-23)

          • interval: number

            Number of intervals (days, months, minutes or weeks) between repeats. Interval type depends of every value

          • OptionalmaxOccurences?: number

            Max number of repeats (min 1)

          • Optionalminute?: number

            Minute (0-59)

          • OptionalskipFirst?: number

            Skip this number of repeats. Min value is 1.

          • OptionalstartsOn?: Date

            Do not start earlier than this date

        • {
              day: number | "last";
              endsOn?: Date;
              every: "month";
              hour?: number;
              interval: number;
              maxOccurences?: number;
              minute?: number;
              skipFirst?: number;
              startsOn?: Date;
          }
          • day: number | "last"

            Day - 'last' or number from 1 to 28

          • OptionalendsOn?: Date

            Do not repeat after this date

          • every: "month"

            Repeat every month

          • Optionalhour?: number

            Hour (0-23)

          • interval: number

            Number of intervals (days, months, minutes or weeks) between repeats. Interval type depends of every value

          • OptionalmaxOccurences?: number

            Max number of repeats (min 1)

          • Optionalminute?: number

            Minute (0-59)

          • OptionalskipFirst?: number

            Skip this number of repeats. Min value is 1.

          • OptionalstartsOn?: Date

            Do not start earlier than this date

        • {
              day: number | "last";
              endsOn?: Date;
              every: "year";
              hour?: number;
              interval: number;
              maxOccurences?: number;
              minute?: number;
              month: number;
              skipFirst?: number;
              startsOn?: Date;
          }
          • day: number | "last"

            Day - 'last' or number from 1 to 28

          • OptionalendsOn?: Date

            Do not repeat after this date

          • every: "year"

            Repeat every year

          • Optionalhour?: number

            Hour (0-23)

          • interval: number

            Number of intervals (days, months, minutes or weeks) between repeats. Interval type depends of every value

          • OptionalmaxOccurences?: number

            Max number of repeats (min 1)

          • Optionalminute?: number

            Minute (0-59)

          • month: number

            Month - number from 1 to 12

          • OptionalskipFirst?: number

            Skip this number of repeats. Min value is 1.

          • OptionalstartsOn?: Date

            Do not start earlier than this date

      Returns ScheduleCalculator

      If schedule is falsy.

    Methods

    • Returns true when the schedule has at least one more date.

      Parameters

      • Optionalspan: number

        Optional millisecond window. When provided the method returns true only if the next date falls within span ms from now.

      Returns boolean

    • Advances to the next scheduled date and returns it together with its 1-based index in the sequence.

      Returns { date: Date; index: number }

      An object with the scheduled date and its index.

      If the schedule has no more dates (hasNext is false).