UNPKG

@types/luxon

Version:
1,240 lines (1,145 loc) 76.5 kB
import { CalendarSystem, DateTimeFormatOptions, NumberingSystem, StringUnitLength, ToISOTimeDurationOptions, WeekSettings, ZoneOptions, } from "../index"; import { CanBeInvalid, DefaultValidity, IfValid, Invalid, Valid } from "./_util"; import { Duration, DurationLike, DurationUnits } from "./duration"; import { Interval } from "./interval"; import { Zone } from "./zone"; export {}; // Turn off default exports export type DateTimeUnit = "year" | "quarter" | "month" | "week" | "day" | "hour" | "minute" | "second" | "millisecond"; export type ToRelativeUnit = "years" | "quarters" | "months" | "weeks" | "days" | "hours" | "minutes" | "seconds"; export type MonthNumbers = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; export type WeekdayNumbers = 1 | 2 | 3 | 4 | 5 | 6 | 7; export type DayNumbers = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31; export type SecondNumbers = | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59; export type MinuteNumbers = SecondNumbers; export type HourNumbers = | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23; export type WeekNumbers = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53; export type QuarterNumbers = 1 | 2 | 3 | 4; export type PossibleDaysInMonth = 28 | 29 | 30 | 31; export type PossibleDaysInYear = 365 | 366; export type PossibleWeeksInYear = 52 | 53; export type ToObjectOutput< IncludeConfig extends boolean | undefined = undefined, IsValid extends boolean | undefined = undefined, > = IsValid extends true ? _ToObjectOutput<IncludeConfig> : CanBeInvalid extends false ? _ToObjectOutput<IncludeConfig> : Partial<_ToObjectOutput<IncludeConfig>>; /** @internal */ export type _ToObjectOutput<IncludeConfig extends boolean | undefined = undefined> = & Record<_ToObjectUnit, number> & (IncludeConfig extends true ? LocaleOptions : unknown); /** @internal */ export type _ToObjectUnit = Exclude<DateTimeUnit, "quarter" | "week">; export interface ToRelativeOptions extends Omit<ToRelativeCalendarOptions, "unit"> { /** * The style of units, must be "long", "short", or "narrow". * @default long */ style?: StringUnitLength | undefined; /** * A single unit or an array of units. If an array is supplied, the method will pick the best one * to use from the array. If omitted, the method will pick the unit from a default set. */ unit?: ToRelativeUnit | ToRelativeUnit[] | undefined; /** * Whether or not to round the numbers in the output. * @default true */ round?: boolean | undefined; /** * Rounding method to use when rounding the numbers in the output * @default 'trunc' */ rounding?: "trunc" | "expand" | "round" | "floor" | "ceil" | undefined; /** * Padding in milliseconds. This allows you to round up the result if it fits inside the threshold. * Do not use this in combination with `{round: false}` because the decimal output will include the padding. * @default 0 */ padding?: number | undefined; } export interface ToRelativeCalendarOptions { /** * The DateTime to use as the basis to which this time is compared * @default now */ base?: DateTime | undefined; /** * Override the locale of this DateTime */ locale?: string | undefined; /** If omitted, the method will pick the unit. */ unit?: ToRelativeUnit | undefined; /** * Override the numberingSystem of this DateTime. * The Intl system may choose not to honor this. */ numberingSystem?: NumberingSystem | undefined; } export interface ToSQLOptions { /** * Include the offset, such as 'Z' or '-04:00' * @default true */ includeOffset?: boolean | undefined; /** * Include the zone, such as 'America/New_York'. Overrides includeOffset. * @default false */ includeZone?: boolean | undefined; /** * include the space between the time and the offset, such as '05:15:16.345 -04:00' * @default true */ includeOffsetSpace?: boolean; } export interface ToISODateOptions extends Pick<ToISOTimeDurationOptions, "format"> { /** * Truncate output to desired presicion. * @default 'day' */ precision?: "year" | "years" | "month" | "months" | "day" | "days" | undefined; } export interface ToISOTimeOptions extends ToISOTimeDurationOptions { /** * Include the offset, such as 'Z' or '-04:00' * @default true */ includeOffset?: boolean | undefined; /** * add the time zone format extension * @default false */ extendedZone?: boolean | undefined; /** * Truncate output to desired presicion. * When precision and suppressSeconds or suppressMilliseconds are used together, * precision sets the maximum unit shown in the output, * however seconds or milliseconds will still be suppressed if they are 0. * @default 'milliseconds' */ precision?: | "year" | "years" | "month" | "months" | "day" | "days" | "hour" | "hours" | "minute" | "minutes" | "second" | "seconds" | "millisecond" | "milliseconds"; } /** @deprecated alias for backwards compatibility */ export type ISOTimeOptions = ToISOTimeOptions; export interface LocaleOptions { /** * @default system's locale */ locale?: string | undefined; outputCalendar?: CalendarSystem | undefined; numberingSystem?: NumberingSystem | undefined; weekSettings?: WeekSettings | undefined; } export type ResolvedLocaleOptions = Required<LocaleOptions>; export interface DateTimeOptions extends LocaleOptions { /** * Use this zone if no offset is specified in the input string itself. Will also convert the time to this zone. * @default local */ zone?: string | Zone | undefined; /** * Override the zone with a fixed-offset zone specified in the string itself, if it specifies one. * @default false */ setZone?: boolean | undefined; } export type DateTimeJSOptions = Omit<DateTimeOptions, "setZone">; /** * Note that ISO weekday and local weekday fields are mutually exclusive */ export interface DateObjectUnits { // a year, such as 1987 year?: number | undefined; // a month, 1-12 month?: number | undefined; // a day of the month, 1-31, depending on the month day?: number | undefined; // day of the year, 1-365 or 366 ordinal?: number | undefined; // an ISO week year weekYear?: number | undefined; // a week year, according to the locale localWeekYear?: number | undefined; // an ISO week number, between 1 and 52 or 53, depending on the year weekNumber?: number | undefined; // a week number, between 1 and 52 or 53, depending on the year, according to the locale localWeekNumber?: number | undefined; // an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday weekday?: WeekdayNumbers | undefined; // a weekday, 1-7, where 1 is the first day of the week, and 7 is the last, according to the locale localWeekday?: WeekdayNumbers | undefined; // hour of the day, 0-23 hour?: number | undefined; // minute of the hour, 0-59 minute?: number | undefined; // second of the minute, 0-59 second?: number | undefined; // millisecond of the second, 0-999 millisecond?: number | undefined; } export type ConversionAccuracy = "casual" | "longterm"; /** * @deprecated You should use `Intl.DateTimeFormatOptions` fields and values instead. */ export type DateTimeFormatPresetValue = "numeric" | "short" | "long"; /** * @deprecated Use `Intl.DateTimeFormatOptions` instead. */ export type DateTimeFormatPreset = Intl.DateTimeFormatOptions; export interface DiffOptions { /** * @default 'casual' */ conversionAccuracy?: ConversionAccuracy | undefined; } export interface _UseLocaleWeekOption { /** If true, use weeks based on the locale, i.e., use the locale-dependent start of the week */ useLocaleWeeks?: boolean; } export type HasSameOptions = _UseLocaleWeekOption; export type StartOfOptions = _UseLocaleWeekOption; export type EndOfOptions = _UseLocaleWeekOption; export interface ExplainedFormat { input: string; tokens: Array<{ literal: boolean; val: string }>; regex?: RegExp | undefined; rawMatches?: RegExpMatchArray | null | undefined; matches?: { [k: string]: any } | undefined; result?: { [k: string]: any } | null | undefined; zone?: Zone | null | undefined; invalidReason?: string | undefined; } export type DateTimeMaybeValid = CanBeInvalid extends true ? (DateTime<Valid> | DateTime<Invalid>) : DateTime; declare const tokenParserBrand: unique symbol; export interface TokenParser { [tokenParserBrand]: true; } type ManyDateTimes = Array<DateTime<boolean>>; export type PickedDateTime<Values extends ManyDateTimes> = Values extends [] ? undefined : | (Values extends Array<DateTime<infer AllValues>> ? | (AllValues extends true ? DateTime<Valid> : never) | (AllValues extends false ? DateTime<Invalid> : never) : never) | ([] extends Values ? undefined : never); /** * # Table of tokens * * (The example values below come from this time `2014-08-06T13:07:04.054` * considered as a local time in America/New_York). * * Note that many tokens supported by the formatter are **not** supported by the parser. * * | Standalone token | Format token | Description | Example | * | ---------------- | ------------ | ----------------------------------------------------------------- | --------------------------- | * | S | | millisecond, no padding | `54` | * | SSS | | millisecond, padded to 3 | `054` | * | u | | fractional seconds, (5 is a half second, 54 is slightly more) | `54` | * | uu | | fractional seconds, (one or two digits) | `05` | * | uuu | | fractional seconds, (only one digit) | `5` | * | s | | second, no padding | `4` | * | ss | | second, padded to 2 padding | `04` | * | m | | minute, no padding | `7` | * | mm | | minute, padded to 2 | `07` | * | h | | hour in 12-hour time, no padding | `1` | * | hh | | hour in 12-hour time, padded to 2 | `01` | * | H | | hour in 24-hour time, no padding | `13` | * | HH | | hour in 24-hour time, padded to 2 | `13` | * | Z | | narrow offset | `+5` | * | ZZ | | short offset | `+05:00` | * | ZZZ | | techie offset | `+0500` | * | z | | IANA zone | `America/New_York` | * | a | | meridiem | `AM` | * | d | | day of the month, no padding | `6` | * | dd | | day of the month, padded to 2 | `06` | * | E | c | day of the week, as number from 1-7 (Monday is 1, Sunday is 7) | `3` | * | EEE | ccc | day of the week, as an abbreviate localized string | `Wed` | * | EEEE | cccc | day of the week, as an unabbreviated localized string | `Wednesday` | * | M | L | month as an unpadded number | `8` | * | MM | LL | month as an padded number | `08` | * | MMM | LLL | month as an abbreviated localized string | `Aug` | * | MMMM | LLLL | month as an unabbreviated localized string | `August` | * | y | | year, 1-6 digits, very literally | `2014` | * | yy | | two-digit year, interpreted as > 1960 by default (also accepts 4) | `14` | * | yyyy | | four-digit year | `2014` | * | yyyyy | | four- to six-digit years | `10340` | * | yyyyyy | | six-digit years | `010340` | * | G | | abbreviated localized era | `AD` | * | GG | | unabbreviated localized era | `Anno Domini` | * | GGGGG | | one-letter localized era | `A` | * | kk | | ISO week year, unpadded | `17` | * | kkkk | | ISO week year, padded to 4 | `2014` | * | W | | ISO week number, unpadded | `32` | * | WW | | ISO week number, padded to 2 | `32` | * | o | | ordinal (day of year), unpadded | `218` | * | ooo | | ordinal (day of year), padded to 3 | `218` | * | q | | quarter, no padding | `3` | * | D | | localized numeric date | `9/6/2014` | * | DD | | localized date with abbreviated month | `Aug 6, 2014` | * | DDD | | localized date with full month | `August 6, 2014` | * | DDDD | | localized date with full month and weekday | `Wednesday, August 6, 2014` | * | t | | localized time | `1:07 AM` | * | tt | | localized time with seconds | `1:07:04 PM` | * | T | | localized 24-hour time | `13:07` | * | TT | | localized 24-hour time with seconds | `13:07:04` | * | f | | short localized date and time | `8/6/2014, 1:07 PM` | * | ff | | less short localized date and time | `Aug 6, 2014, 1:07 PM` | * | F | | short localized date and time with seconds | `8/6/2014, 1:07:04 PM` | * | FF | | less short localized date and time with seconds | `Aug 6, 2014, 1:07:04 PM` | * | ' | | literal start/end, characters between are not tokenized | `'T'` | * * Sourced from [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). */ type Tokens = string; /** * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. * It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. * * A DateTime consists of the following parts: * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. * * A time zone. Each instance is considered in the context of a specific zone (by default, the local system's zone). * * Configuration properties that affect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. * * Here is a brief overview of the most commonly used functionality it provides: * * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. * To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. * To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e. as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, * {@link DateTime#month}, {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, * {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, * {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, * {@link DateTime#toMillis} and {@link DateTime#toJSDate}. * * There's plenty others documented below. In addition, for more information on subtler topics * like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. */ export class DateTime<IsValid extends boolean = DefaultValidity> { /** * Create a DateTime for the current instant, in the system's time zone. * * Use Settings to override these default values if needed. * @example * DateTime.now().toISO() //~> now in the ISO format */ static now(): DateTime<Valid>; /** * Create a local DateTime * * @param year - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used * @param month - The month, 1-indexed * @param day - The day of the month, 1-indexed * @param hour - The hour of the day, in 24-hour time * @param minute - The minute of the hour, meaning a number between 0 and 59 * @param second - The second of the minute, meaning a number between 0 and 59 * @param millisecond - The millisecond of the second, meaning a number between 0 and 999 * @param opts * * @example * DateTime.local() //~> now * @example * DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time * @example * DateTime.local(2017) //~> 2017-01-01T00:00:00 * @example * DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 * @example * DateTime.local(2017, 3, 12, { locale: "fr") //~> 2017-03-12T00:00:00, with a French locale * @example * DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 * @example * DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC * @example * DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 * @example * DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 * @example * DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 */ static local( year: number, month: number, day: number, hour: number, minute: number, second: number, millisecond: number, opts?: DateTimeJSOptions, ): DateTimeMaybeValid; static local( year: number, month: number, day: number, hour: number, minute: number, second: number, opts?: DateTimeJSOptions, ): DateTimeMaybeValid; static local( year: number, month: number, day: number, hour: number, minute: number, opts?: DateTimeJSOptions, ): DateTimeMaybeValid; static local(year: number, month: number, day: number, hour: number, opts?: DateTimeJSOptions): DateTimeMaybeValid; static local(year: number, month: number, day: number, opts?: DateTimeJSOptions): DateTimeMaybeValid; static local(year: number, month: number, opts?: DateTimeJSOptions): DateTimeMaybeValid; static local(year: number, opts?: DateTimeJSOptions): DateTimeMaybeValid; static local(opts?: DateTimeJSOptions): DateTime<Valid>; /** * Create a DateTime in UTC * * @param year - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used * @param month - The month, 1-indexed * @param day - The day of the month * @param hour - The hour of the day, in 24-hour time * @param minute - The minute of the hour, meaning a number between 0 and 59 * @param second - The second of the minute, meaning a number between 0 and 59 * @param millisecond - The millisecond of the second, meaning a number between 0 and 999 * @param options - configuration options for the DateTime * @param options.locale - a locale to set on the resulting DateTime instance * @param options.outputCalendar - the output calendar to set on the resulting DateTime instance * @param options.numberingSystem - the numbering system to set on the resulting DateTime instance * * @example * DateTime.utc() //~> now * @example * DateTime.utc(2017) //~> 2017-01-01T00:00:00Z * @example * DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z * @example * DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z * @example * DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z * @example * DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z * @example * DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" } ) //~> 2017-03-12T05:45:00Z with a French locale * @example * DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z * @example * DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr") //~> 2017-03-12T05:45:10.765Z with a French locale */ static utc( year: number, month: number, day: number, hour: number, minute: number, second: number, millisecond: number, options?: LocaleOptions, ): DateTimeMaybeValid; static utc( year: number, month: number, day: number, hour: number, minute: number, second: number, options?: LocaleOptions, ): DateTimeMaybeValid; static utc( year: number, month: number, day: number, hour: number, minute: number, options?: LocaleOptions, ): DateTimeMaybeValid; static utc(year: number, month: number, day: number, hour: number, options?: LocaleOptions): DateTimeMaybeValid; static utc(year: number, month: number, day: number, options?: LocaleOptions): DateTimeMaybeValid; static utc(year: number, month: number, options?: LocaleOptions): DateTimeMaybeValid; static utc(year: number, options?: LocaleOptions): DateTimeMaybeValid; static utc(options?: LocaleOptions): DateTime<Valid>; /** * Create a DateTime from a JavaScript Date object. Uses the default zone. * * @param date - a JavaScript Date object * @param options - configuration options for the DateTime * @param options.zone - the zone to place the DateTime into */ static fromJSDate(date: Date, options?: { zone?: string | Zone }): DateTimeMaybeValid; /** * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. * * @param milliseconds - a number of milliseconds since 1970 UTC * @param options - configuration options for the DateTime * @param options.zone - the zone to place the DateTime into. Defaults to 'local'. * @param options.locale - a locale to set on the resulting DateTime instance * @param options.outputCalendar - the output calendar to set on the resulting DateTime instance * @param options.numberingSystem - the numbering system to set on the resulting DateTime instance */ static fromMillis(milliseconds: number, options?: DateTimeJSOptions): DateTimeMaybeValid; /** * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. * * @param seconds - a number of seconds since 1970 UTC * @param options - configuration options for the DateTime * @param options.zone - the zone to place the DateTime into. Defaults to 'local'. * @param options.locale - a locale to set on the resulting DateTime instance * @param options.outputCalendar - the output calendar to set on the resulting DateTime instance * @param options.numberingSystem - the numbering system to set on the resulting DateTime instance */ static fromSeconds(seconds: number, options?: DateTimeJSOptions): DateTimeMaybeValid; /** * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. * * @param obj - the object to create the DateTime from * @param obj.year - a year, such as 1987 * @param obj.month - a month, 1-12 * @param obj.day - a day of the month, 1-31, depending on the month * @param obj.ordinal - day of the year, 1-365 or 366 * @param obj.weekYear - an ISO week year * @param obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year * @param obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday * @param obj.hour - hour of the day, 0-23 * @param obj.minute - minute of the hour, 0-59 * @param obj.second - second of the minute, 0-59 * @param obj.millisecond - millisecond of the second, 0-999 * @param opts - options for creating this DateTime * @param opts.zone - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone(). Defaults to 'local'. * @param opts.locale - a locale to set on the resulting DateTime instance. Defaults to 'system's locale'. * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance * @param opts.numberingSystem - the numbering system to set on the resulting DateTime instance * * @example * DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' * @example * DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' * @example * DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //=> today at 10:26:06 * @example * DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }) * @example * DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) * @example * DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) * @example * DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' * @example * DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: 'en-US' }).toISODate() //=> '2021-12-26' */ static fromObject(obj: DateObjectUnits, opts?: DateTimeJSOptions): DateTimeMaybeValid; /** * Create a DateTime from an ISO 8601 string * * @param text - the ISO string * @param opts - options to affect the creation * @param opts.zone - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone. Defaults to 'local'. * @param opts.setZone - override the zone with a fixed-offset zone specified in the string itself, if it specifies one. Defaults to false. * @param opts.locale - a locale to set on the resulting DateTime instance. Defaults to 'system's locale'. * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance * @param opts.numberingSystem - the numbering system to set on the resulting DateTime instance * * @example * DateTime.fromISO('2016-05-25T09:08:34.123') * @example * DateTime.fromISO('2016-05-25T09:08:34.123+06:00') * @example * DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) * @example * DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) * @example * DateTime.fromISO('2016-W05-4') */ static fromISO(text: string, opts?: DateTimeOptions): DateTimeMaybeValid; /** * Create a DateTime from an RFC 2822 string * * @param text - the RFC 2822 string * @param opts - options to affect the creation * @param opts.zone - convert the time to this zone. Since the offset is always specified in the string itself, * this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. Defaults to 'local' * @param opts.setZone - override the zone with a fixed-offset zone specified in the string itself, if it specifies one. Defaults to false. * @param opts.locale - a locale to set on the resulting DateTime instance. Defaults to 'system's locale'. * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance * @param opts.numberingSystem - the numbering system to set on the resulting DateTime instance * * @example * DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') * @example * DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') * @example * DateTime.fromRFC2822('25 Nov 2016 13:23 Z') */ static fromRFC2822(text: string, opts?: DateTimeOptions): DateTimeMaybeValid; /** * Create a DateTime from an HTTP header date * * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 * * @param text - the HTTP header date * @param opts - options to affect the creation * @param opts.zone - convert the time to this zone. Since HTTP dates are always in UTC, * this has no effect on the interpretation of string,merely the zone the resulting DateTime is expressed in. Defaults to 'local'. * @param opts.setZone - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, * so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. Defaults to false. * @param opts.locale - a locale to set on the resulting DateTime instance. Defaults to 'system's locale'. * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance * @param opts.numberingSystem - the numbering system to set on the resulting DateTime instance * * @example * DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') * @example * DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') * @example * DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') */ static fromHTTP(text: string, opts?: DateTimeOptions): DateTimeMaybeValid; /** * Create a DateTime from an input string and format string. * * Defaults to en-US if no locale has been specified, regardless of the system's locale. * * For a table of tokens and their interpretations, * see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). * * @param text - the string to parse * @param format - the format the string is expected to be in (see the link below for the formats) * @param opts - options to affect the creation * @param opts.zone - use this zone if no offset is specified in the input string itself. * Will also convert the DateTime to this zone. * Defaults to 'local'. * @param opts.setZone - override the zone with a zone specified in the string itself, if it specifies one. * Defaults to false. * @param opts.locale - a locale string to use when parsing. * Will also set the DateTime to this locale. * Defaults to 'en-US'. * @param opts.numberingSystem - the numbering system to use when parsing. * Will also set the resulting DateTime to this numbering system * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance */ static fromFormat(text: string, format: Tokens, opts?: DateTimeOptions): DateTimeMaybeValid; /** * @deprecated use fromFormat instead */ static fromString(text: string, format: Tokens, options?: DateTimeOptions): DateTimeMaybeValid; /** * Create a DateTime from a SQL date, time, or datetime * Defaults to en-US if no locale has been specified, regardless of the system's locale * * @param text - the string to parse * @param opts - options to affect the creation * @param opts.zone - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone. Defaults to 'local'. * @param opts.setZone - override the zone with a zone specified in the string itself, if it specifies one. Defaults to false. * @param opts.locale - a locale string to use when parsing. Will also set the DateTime to this locale. Defaults to 'en-US'. * @param opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system * @param opts.outputCalendar - the output calendar to set on the resulting DateTime instance * * @example * DateTime.fromSQL('2017-05-15') * @example * DateTime.fromSQL('2017-05-15 09:12:34') * @example * DateTime.fromSQL('2017-05-15 09:12:34.342') * @example * DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') * @example * DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') * @example * DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) * @example * DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) * @example * DateTime.fromSQL('09:12:34.342') */ static fromSQL(text: string, opts?: DateTimeOptions): DateTimeMaybeValid; /** * Create an invalid DateTime. * * @param reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent * @param explanation - longer explanation, may include parameters and other useful debugging information. Defaults to null. */ static invalid(reason: string, explanation?: string): DateTime<Invalid>; /** * Check if an object is a DateTime. Works across context boundaries * * @param o */ static isDateTime(o: unknown): o is DateTimeMaybeValid; /** * Produce the format string for a set of options * * @param formatOpts - Intl.DateTimeFormat constructor options and configuration options * @param localeOpts - Opts to override the configuration options on this DateTime * * @example * DateTime.parseFormatForOpts(DateTime.DATETIME_FULL); //=> "MMMM d, yyyyy, h:m a ZZZ" */ static parseFormatForOpts(formatOpts?: DateTimeFormatOptions, localeOpts?: LocaleOptions): string | null; /** * Produce the fully expanded format token for the locale * * Does NOT quote characters, so quoted tokens will not round trip correctly * * @param format - the format string - see {@link Tokens} * @param localeOptions - Options to override the configuration options on this DateTime */ static expandFormat(format: Tokens, localeOptions?: LocaleOptions): string; private constructor(config: unknown); // INFO /** * Get the value of unit. * * @param unit - a unit such as 'minute' or 'day' * * @example * DateTime.local(2017, 7, 4).get('month'); //=> 7 * @example * DateTime.local(2017, 7, 4).get('day'); //=> 4 */ get(unit: keyof DateTime): number; /** * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC in this DateTime's zone. * During DST changes local time can be ambiguous, for example 2023-10-29T02:30:00 in Europe/Berlin can have offset +01:00 or +02:00. * This method will return both possible DateTimes if this DateTime's local time is ambiguous. */ getPossibleOffsets(): this[]; /** * Returns whether the DateTime is valid. Invalid DateTimes occur when: * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 * * The DateTime was created by an operation on another invalid date */ get isValid(): IfValid<true, false, IsValid>; /** * Returns an error code if this DateTime is invalid, or null if the DateTime is valid */ get invalidReason(): IfValid<null, string, IsValid>; /** * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid */ get invalidExplanation(): IfValid<null, string | null, IsValid>; /** * Get the locale of a DateTime, such as 'en-GB'. The locale is used when formatting the DateTime */ get locale(): IfValid<string, null, IsValid>; /** * Get the numbering system of a DateTime, such as 'beng'. The numbering system is used when formatting the DateTime */ get numberingSystem(): IfValid<string, null, IsValid>; /** * Get the output calendar of a DateTime, such as 'islamic'. The output calendar is used when formatting the DateTime */ get outputCalendar(): IfValid<string, null, IsValid>; /** * Get the time zone associated with this DateTime. */ get zone(): Zone<IsValid>; /** * Get the name of the time zone. */ get zoneName(): IfValid<string, null, IsValid>; /** * Get the year * * @example DateTime.local(2017, 5, 25).year //=> 2017 */ get year(): IfValid<number, typeof NaN, IsValid>; /** * Get the quarter * * @example DateTime.local(2017, 5, 25).quarter //=> 2 */ get quarter(): IfValid<QuarterNumbers, typeof NaN, IsValid>; /** * Get the month (1-12). * * @example DateTime.local(2017, 5, 25).month //=> 5 */ get month(): IfValid<MonthNumbers, typeof NaN, IsValid>; /** * Get the day of the month (1-30ish). * * @example DateTime.local(2017, 5, 25).day //=> 25 */ get day(): IfValid<DayNumbers, typeof NaN, IsValid>; /** * Get the hour of the day (0-23). * * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 */ get hour(): IfValid<HourNumbers, typeof NaN, IsValid>; /** * Get the minute of the hour (0-59). * * @example * DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 */ get minute(): IfValid<MinuteNumbers, typeof NaN, IsValid>; /** * Get the second of the minute (0-59). * * @example * DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 */ get second(): IfValid<SecondNumbers, typeof NaN, IsValid>; /** * Get the millisecond of the second (0-999). * * @example * DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 */ get millisecond(): IfValid<number, typeof NaN, IsValid>; /** * Get the week year * @see https://en.wikipedia.org/wiki/ISO_week_date * * @example * DateTime.local(2014, 12, 31).weekYear //=> 2015 */ get weekYear(): IfValid<number, typeof NaN, IsValid>; /** * Get the week number of the week year (1-52ish). * @see https://en.wikipedia.org/wiki/ISO_week_date * * @example * DateTime.local(2017, 5, 25).weekNumber //=> 21 */ get weekNumber(): IfValid<WeekNumbers, typeof NaN, IsValid>; /** * Get the day of the week. * 1 is Monday and 7 is Sunday * @see https://en.wikipedia.org/wiki/ISO_week_date * * @example * DateTime.local(2014, 11, 31).weekday //=> 4 */ get weekday(): IfValid<WeekdayNumbers, typeof NaN, IsValid>; /** * Returns true if this date is on a weekend, according to the locale, false otherwise */ get isWeekend(): IfValid<boolean, false, IsValid>; /** * Get the day of the week, according to the locale. * 1 is the first day of the week, and 7 is the last day of the week. * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1. */ get localWeekday(): IfValid<WeekdayNumbers, typeof NaN, IsValid>; /** * Get the week number of the week year, according to the locale. * Different locales assign week numbers differently. * The week can start on different days of the week (see {@link localWeekday}), * and because a different number of days is required for a week to count as the first week of a year. */ get localWeekNumber(): IfValid<number, typeof NaN, IsValid>; /** * Get the week year, according to the locale. * Different locales assign week numbers (and therefore week years) differently, see {@link localWeekNumber}. */ get localWeekYear(): IfValid<number, typeof NaN, IsValid>; /** * Get the ordinal (meaning the day of the year) * * @example * DateTime.local(2017, 5, 25).ordinal //=> 145 */ get ordinal(): IfValid<number, typeof NaN, IsValid>; /** * Get the human readable short month name, such as 'Oct'. * Defaults to the system's locale if no locale has been specified * * @example * DateTime.local(2017, 10, 30).monthShort //=> Oct */ get monthShort(): IfValid<string, null, IsValid>; /** * Get the human readable long month name, such as 'October'. * Defaults to the system's locale if no locale has been specified * * @example * DateTime.local(2017, 10, 30).monthLong //=> October */ get monthLong(): IfValid<string, null, IsValid>; /** * Get the human readable short weekday, such as 'Mon'. * Defaults to the system's locale if no locale has been specified * * @example * DateTime.local(2017, 10, 30).weekdayShort //=> Mon */ get weekdayShort(): IfValid<string, null, IsValid>; /** * Get the human readable long weekday, such as 'Monday'. * Defaults to the system's locale if no locale has been specified * * @example * DateTime.local(2017, 10, 30).weekdayLong //=> Monday */ get weekdayLong(): IfValid<string, null, IsValid>; /** * Get the UTC offset of this DateTime in minutes * * @example * DateTime.now().offset //=> -240 * @example * DateTime.utc().offset //=> 0 */ get offset(): IfValid<number, typeof NaN, IsValid>; /** * Get the short human name for the zone's current offset, for example "EST" or "EDT". * Defaults to the system's locale if no locale has been specified */ get offsetNameShort(): IfValid<string, null, IsValid>; /** * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". * Defaults to the system's locale if no locale has been specified */ get offsetNameLong(): IfValid<string, null, IsValid>; /** * Get whether this zone's offset ever changes, as in a DST. */ get isOffsetFixed(): IfValid<boolean, null, IsValid>; /** * Get whether the DateTime is in a DST. */ get isInDST(): IfValid<boolean, false, IsValid>; /** * Returns true if this DateTime is in a leap year, false otherwise * * @example * DateTime.local(2016).isInLeapYear //=> true * @example * DateTime.local(2013).isInLeapYear //=> false */ get isInLeapYear(): boolean; /** * Returns the number of days in this DateTime's month * * @example * DateTime.local(2016, 2).daysInMonth //=> 29 * @example * DateTime.local(2016, 3).daysInMonth //=> 31 */ get daysInMonth(): IfValid<PossibleDaysInMonth, undefined, IsValid>; /** * Returns the number of days in this DateTime's year * * @example * DateTime.local(2016).daysInYear //=> 366 * @example * DateTime.local(2013).daysInYear //=> 365 */ get daysInYear(): IfValid<PossibleDaysInYear, typeof NaN, IsValid>; /** * Returns the number of weeks in this DateTime's year * @see https://en.wikipedia.org/wiki/ISO_week_date * * @example * DateTime.local(2004).weeksInWeekYear //=> 53 * @example * DateTime.local(2013).weeksInWeekYear //=> 52 */ get weeksInWeekYear(): IfValid<PossibleWeeksInYear, typeof NaN, IsValid>; /** * Returns the number of weeks in this DateTime's local week year * * @example * DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52 * @example * DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53 */ get weeksInLocalWeekYear(): IfValid<PossibleWeeksInYear, typeof NaN, IsValid>; /** * Returns the resolved Intl options for this DateTime. * This is useful in understanding the behavior of formatting methods * * @param opts - the same options as toLocaleString */ resolvedLocaleOption