Class Duration

A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use plus to add a Duration object to a DateTime, producing another DateTime. * Here is a brief overview of commonly used methods and getters in Duration:

There are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.

Hierarchy

  • Duration

Implements

Accessors

  • get invalidExplanation(): undefined | null | string
  • Returns an explanation of why this Duration became invalid, or null if the Duration is valid

    Returns undefined | null | string

  • get invalidReason(): null | string
  • Returns an error code if this Duration became invalid, or null if the Duration is valid

    Returns

    Returns null | string

  • get isValid(): boolean
  • Returns whether the Duration is invalid. Invalid durations are returned by diff operations on invalid DateTimes or Intervals.

    Returns

    Returns boolean

  • get locale(): string | void
  • Get the locale of a Duration, such 'en-GB'

    Returns string | void

  • get matrix(): Readonly<{
        days: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        hours: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        minutes: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        months: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        quarters: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        seconds: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        weeks: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        years: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
    }>
  • Get the conversion matrix of a Duration

    Returns Readonly<{
        days: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        hours: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        minutes: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        months: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        quarters: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        seconds: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        weeks: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
        years: {
            days: undefined | number;
            hours: undefined | number;
            milliseconds: undefined | number;
            minutes: undefined | number;
            months: undefined | number;
            quarters: undefined | number;
            seconds: undefined | number;
            weeks: undefined | number;
            years: undefined | number;
        };
    }>

Methods

  • Return the length of the duration in the specified unit.

    Example

    Duration.fromObject({years: 1}).as('days') //=> 365
    

    Example

    Duration.fromObject({years: 1}).as('months') //=> 12
    

    Example

    Duration.fromObject({hours: 60}).as('days') //=> 2.5
    

    Returns

    Parameters

    Returns number

  • Equality check Two Durations are equal iff they have the same units and the same values for each unit.

    Returns

    Parameters

    Returns boolean

  • Get the value of unit.

    Example

    Duration.fromObject({years: 2, days: 3}).get('years') //=> 2
    

    Example

    Duration.fromObject({years: 2, days: 3}).get('months') //=> 0
    

    Example

    Duration.fromObject({years: 2, days: 3}).get('days') //=> 3
    

    Returns

    Parameters

    Returns number

  • Returns the max unit in the duration, forcing the shifting to the max possible. Forcing solves having bigger units at 0, when creating with a smaller unit. Es. Duration.fromMillis(4945676146971854) By default it uses all the units, but a flag can be passed to use only Human duration units (all except quarters and weeks)

    Example

    var dur = Duration.fromObject({ minutes: 61 })
    dur.getMaxUnit() //=> 'hours'

    Parameters

    • onlyHuman: false

      Choose if using ORDERED_UNITS (default) or HUMAN_ORDERED_UNITS

    Returns keyof NormalizedDurationObject

  • Parameters

    • onlyHuman: true

    Returns NormalizedHumanDurationUnit

  • Scale this Duration by the specified amount. Return a newly-constructed Duration.

    Example

    Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }
    

    Example

    Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hours" ? x * 2 : x) //=> { hours: 2, minutes: 30 }
    

    Returns

    Parameters

    • fn: ((x: number, unit: keyof DurationObject) => number)

      The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.

    Returns Duration

  • Make this Duration shorter by the specified amount. Return a newly-constructed Duration.

    Returns

    Parameters

    • duration: DurationLike

      The amount to subtract. Either a Luxon Duration or the object argument to Duration.fromObject()

    Returns Duration

  • Return the negative of this Duration.

    Example

    Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }
    

    Returns

    Returns Duration

  • Reduce this Duration to its canonical representation in its current units.

    Example

    Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }
    

    Example

    Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }
    

    Returns

    Returns Duration

  • Make this Duration longer by the specified amount. Return a newly-constructed Duration.

    Returns

    Parameters

    • duration: DurationLike

      The amount to add. Either a Luxon Duration or the object argument to Duration.fromObject()

    Returns Duration

  • "Set" the locale and/or numberingSystem and/or conversionAccuracy. Returns a newly-constructed Duration.

    Example

    dur.reconfigure({ locale: 'en-GB' })
    

    Returns

    Parameters

    Returns Duration

  • Rescale units to its largest representation

    Example

    Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }
    

    Returns

    Returns Duration

  • "Set" the values of specified units. Non-specified units stay unchanged. Return a newly-constructed Duration.

    Example

    dur.set({ years: 2017 })
    

    Example

    dur.set({ hours: 8, minutes: 30 })
    

    Returns

    Parameters

    Returns Duration

  • Convert this Duration into its representation in a different set of units.

    Example

    Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }
    

    Returns

    Parameters

    Returns Duration

  • Shift this Duration to all available units. Same as shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds")

    Returns

    Returns Duration

  • Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:

    • S for milliseconds
    • s for seconds
    • m for minutes
    • h for hours
    • d for days
    • w for weeks
    • M for months
    • y for years Notes:
    • Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits
    • Tokens can be escaped by wrapping with single quotes.
    • The duration will be converted to the set of units in the format string using shiftTo and the Durations' conversion accuracy setting.

    Example

    Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2"
    

    Example

    Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002"
    

    Example

    Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000"
    

    Returns

    Parameters

    Returns string

  • Returns an ISO 8601-compliant string representation of this Duration.

    See

    https://en.wikipedia.org/wiki/ISO_8601#Durations

    Example

    Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'
    

    Example

    Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'
    

    Example

    Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'
    

    Example

    Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'
    

    Example

    Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'
    

    Returns

    Returns null | string

  • Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.

    See

    https://en.wikipedia.org/wiki/ISO_8601#Times

    Example

    Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'
    

    Example

    Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'
    

    Example

    Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'
    

    Example

    Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'
    

    Example

    Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'
    

    Returns

    Parameters

    Returns null | string

  • Returns an ISO 8601 representation of this Duration appropriate for use in JSON.

    Returns

    Returns null | string

  • Returns a milliseconds value of this Duration.

    Returns

    Returns number

  • Returns an ISO 8601 representation of this Duration appropriate for use in debugging.

    Returns

    Returns null | string

  • Returns a milliseconds value of this Duration. Alias of toMillis

    Returns

    Returns number

  • Create a Duration from DurationLike.

    Returns

    Parameters

    • durationLike: number | DurationLike

      One of:

      • object with keys like 'years' and 'hours'.
      • number representing milliseconds
      • Duration instance

    Returns Duration

  • Create a Duration from an ISO 8601 duration string.

    See

    https://en.wikipedia.org/wiki/ISO_8601#Durations

    Example

    Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }
    

    Example

    Duration.fromISO('PT23H').toObject() //=> { hours: 23 }
    

    Example

    Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }
    

    Returns

    Parameters

    • text: string

      text to parse

    • Optional opts: DurationOptions

      options for parsing

    Returns Duration

  • Create a Duration from an ISO 8601 time string.

    See

    https://en.wikipedia.org/wiki/ISO_8601#Times

    Example

    Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }
    

    Example

    Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
    

    Example

    Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
    

    Example

    Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
    

    Example

    Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
    

    Returns

    Parameters

    • text: string

      text to parse

    • opts: DurationOptions = {}

      options for parsing

    Returns Duration

  • Create an invalid Duration.

    Returns

    Parameters

    • reason: string | Invalid

      simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent

    • Optional explanation: string

      longer explanation, may include parameters and other useful debugging information

    Returns Duration

  • Check if an object is a Duration. Works across context boundaries

    Returns

    Parameters

    • o: unknown

    Returns o is Duration

Generated using TypeDoc