Options
All
  • Public
  • Public/Protected
  • All
Menu

Class Recur

The main Recur object to provide an interface for settings, rules, and matching

Creating Rules

moment-recur-ts uses rules to define when a date should recur. You can then generate future or past recurrences based on these rules, or see if a specific date matches the rules. Rules can also be overridden or removed.

Length Intervals

moment-recur-ts supports intervals for days, weeks, months, and years. Measurements may be singular or plural (ex: day() vs days()). Length Intervals must have a start date defined.

Possible Length Intervals Include:

  • day / days
  • week / weeks
  • month / months
  • year / years

Calendar Intervals

Calendar Intervals do not depend on a start date. They define a unit of another unit. For instance, a day of a month, or a month of a year. Measurements may be singular or plural (ex: dayOfMonth() vs daysOfMonth()).

Possible Calendar Intervals Include:

  • dayOfWeek / daysOfWeek
  • dayOfMonth / daysOfMonth
  • weekOfMonth / weeksOfMonth
  • weekOfYear / weeksOfYear
  • monthOfYear / monthsOfYear

Hierarchy

  • Recur

Implements

  • Iterable<Moment>

Index

Constructors

constructor

  • Recur Object Constrcutor

    From an instance of moment:

    let recurrence;
    
    // Create a recurrence using today as the start date.
    recurrence = moment().recur();
    
    // Create a recurrence while passing the start and end dates to the recur function.
    // Note: passing an end date requires you to also pass a start date.
    recurrence = moment().recur( start, end );
    
    // You may pass a start date to the moment, or use an existing moment, to set the start date.
    // In this case, passing a date to the recur function sets and end date.
    recurrence = moment(start).recur( end );
    
    // Finally, you can create a recurrence and pass in an entire set of options.
    recurrence = moment().recur({
      start: "01/01/2014",
      end: "01/01/2015"
    });
    

    From static moment:

    // Create recurrence without a start date. Note: this will not work with intervals.
    recurrence = moment.recur();
    
    // Create a recurrence, passing just the start, or the start and end dates.
    recurrence = moment.recur( start, end );
    
    // Create a recurrence, passing set of options.
    recurrence = moment.recur({
      start: "01/01/2014",
      end: "01/01/2015"
    });
    

    Parameters

    Returns Recur

Methods

__@iterator

  • __@iterator(): IterableIterator<Moment>
  • Iterate over moments matched by rules

    Note if there is no end date, results are unbounded (you must manually terminate the iterator).

    Also note, this exapmle intentionally ignores some complicated leap year math.

    let recurrence = moment('2012-01').recur('2032-01').every(4).years()
    let leapYears = [...recurrence].map(m => m.year())
    // leapYears = [ 2012, 2016, 2020, 2024, 2028, 2032 ]
    

    Or, this is a bit faster...

    let recurrence = moment('2012-01').recur('2032-01').every(4).years()
    let leapYears = []
    for (let date of recurrence) {
      leapYears.push(date.year())
    }
    // leapYears = [ 2012, 2016, 2020, 2024, 2028, 2032 ]
    

    Returns IterableIterator<Moment>

all

  • all(): Moment[]
  • all(format: string): string[]
  • With both a start date and an end date set, you can generate all dates within that range that match the pattern (including the start/end dates).

    let recurrence = moment().recur("01/01/2014", "01/07/2014").every(2).days();
    
    // Outputs: ["01/01/2014", "01/03/2014", "01/05/2014", "01/07/2014"]
    allDates = recurrence.all("L");
    

    Returns Moment[]

  • Parameters

    • format: string

    Returns string[]

day

dayOfMonth

dayOfWeek

days

daysOfMonth

daysOfWeek

endDate

  • endDate(): Moment
  • endDate(date: MomentInput | null): this
  • Get/Set the End Date

    recurrence.endDate(); // Get
    recurrence.endDate("01/01/2014"); // Set
    
    category

    getter/setter

    Returns Moment

  • Parameters

    • date: MomentInput | null

    Returns this

every

  • The every() function allows you to set the units and, optionally, the measurment type of the recurring date. It returns the recur object to allow chaining.

     let myDate, recurrence;
    
     // Create a date to start from
     myDate = moment("01/01/2014");
    
     // You can pass the units to recur on, and the measurement type.
     recurrence = myDate.recur().every(1, "days");
    
     // You can also chain the measurement type instead of passing it to every.
     recurrence = myDate.recur().every(1).day();
    
     // It is also possible to pass an array of units.
     recurrence = myDate.recur().every([3, 5]).days();
    
     // When using the dayOfWeek measurement, you can pass days names.
     recurrence = myDate.recur().every(["Monday", "wed"]).daysOfWeek();
    
     // Month names also work when using monthOfYear.
     recurrence = myDate.recur().every(["Jan", "february"], "monthsOfYear");
    

    every() will override the last "every" if a measurement was not provided. The following line will create a recurrence for every 5 days.

     recurrence  = myDate.recur().every(1).every(5).days();
    

    If you need to specify multiple units, pass an array to every().

    You may also pass the units directly to the interval functions (listed below) instead of using every().

     let recurrence = moment.recur().monthOfYear("January");
    

    Parameters

    Returns this

except

  • except(date: MomentInput): this
  • To prevent a date from matching that would normally match, use the except() function.

    let recurrence = moment("01/01/2014").recur().every(1).day().except("01/02/2014");
    recurrence.matches("01/02/2014"); // false
    

    Parameters

    • date: MomentInput

    Returns this

forget

  • forget(dateOrRule: MomentInput | MeasureInput, format?: undefined | string): this
  • Forgets rules (by passing measure) and exceptions (by passing date)

    // Exceptions can be removed by passing a date to the forget() function.
    recurrence.forget("01/03/2014");
    
    // Rules can be removed by passing the measurement to the forget() function.
    recurrence.forget("days");
    

    Parameters

    • dateOrRule: MomentInput | MeasureInput
    • Optional format: undefined | string

    Returns this

fromDate

  • fromDate(): Moment
  • fromDate(date: MomentInput | null): this
  • Get/Set a temporary "From Date" for use with generating dates

    recurrence.fromDate(); // Get
    recurrence.fromDate("01/01/2014"); // Set
    
    category

    getter/setter

    Returns Moment

  • Parameters

    • date: MomentInput | null

    Returns this

hasRule

matches

  • matches(dateToMatch: MomentInput, ignoreStartEnd?: undefined | true | false): boolean
  • The matches() function will test a date to check if all of the recurrence rules match. It returns true if the date matches, false otherwise.

    let interval = moment("01/01/2014").recur().every(2).days();
    interval.matches("01/02/2014"); // false
    interval.matches("01/03/2014"); // true
    

    You may also see if a date matches before the start date or after the end date by passing true as the second argument to matches().

    let interval = moment("01/01/2014").recur().every(2).days();
    interval.matches("12/30/2013"); // false
    interval.matches("12/30/2013", true); // true
    

    Parameters

    • dateToMatch: MomentInput
    • Optional ignoreStartEnd: undefined | true | false

    Returns boolean

maxYears

  • maxYears(): number
  • maxYears(years: number): this
  • Interval calculations will use a default of 1000 year limit when determining unbounded rules. Use this function to query or change the maximum limit.

    Returns number

  • Parameters

    • years: number

    Returns this

month

monthOfYear

months

monthsOfYear

  • // Will match any date that is in January of any year.
    cal = moment.recur().every("January").monthsOfYear();
    

    Parameters

    Returns this

next

  • next(num: number): Moment[]
  • next(num: number, format: string): string[]
  • Get next N occurrences

    // Generate the next three dates as moments
    // Outputs: [moment("01/03/2014"), moment("01/05/2014"), moment("01/07/2014")]
    nextDates = recurrence.next(3);
    
    // Generate the next three dates, formatted in local format
    // Outputs: ["01/03/2014", "01/05/2014", "01/07/2014"]
    nextDates = recurrence.next(3, "L");
    

    Parameters

    • num: number

    Returns Moment[]

  • Parameters

    • num: number
    • format: string

    Returns string[]

previous

  • previous(num: number): Moment[]
  • previous(num: number, format: string): string[]
  • Get previous N occurrences

    // Generate previous three dates, formatted in local format
    // Outputs: ["12/30/2013", "12/28/2013", "12/26/2013"]
    nextDates = recurrence.previous(3, "L");
    

    Parameters

    • num: number

    Returns Moment[]

  • Parameters

    • num: number
    • format: string

    Returns string[]

repeats

  • repeats(): boolean
  • Use repeats() to check if a recurrence has rules set.

    recurrence.repeats(); // true/false
    

    Returns boolean

reverse

  • reverse(): this
  • Reverse iterator direction

    Note since there is no end date, results are unbounded (you must manually terminate the iterator).

    let mondays = []
    for (let monday of moment().recur().every('Monday').dayOfWeek().reverse()) {
      lastThreeMondays.push(monday)
      if (mondays.length > 10) break
    }
    

    Returns this

save

  • Use save() to export all options, rules, and exceptions as an object. This can be used to store recurrences in a database.

    Note: This does not export the "From Date" which is considered a temporary option.

    recurrence.save();
    

    Returns Options

startDate

  • startDate(): Moment
  • startDate(date: MomentInput | null): this
  • Get/Set the Start Date

    recurrence.startDate(); // Get
    recurrence.startDate("01/01/2014"); // Set
    
    category

    getter/setter

    Returns Moment

  • Parameters

    • date: MomentInput | null

    Returns this

week

weekOfMonth

weekOfMonthByDay

weekOfYear

weeks

weeksOfMonth

weeksOfMonthByDay

  • A weekOfMonthByDay interval is available for combining with the daysOfWeek to achieve "nth weekday of month" recurrences. The following matches every 1st and 3rd Thursday of the month.

    (Note this cannot be combined at the moment with every(x).months() expression)

    cal = moment.recur()
      .every("Thursday").daysOfWeek()
      .every([0, 2]).weeksOfMonthByDay();
    
    cal = moment.recur()
      .every(moment("01/01/2014").day()).daysOfWeek()
      .every(moment("01/01/2014").monthWeekByDay()).weeksOfMonthByDay();
    

    Parameters

    Returns this

weeksOfYear

year

years

Generated using TypeDoc