ts • Lines: 183/*
* Copyright 2020 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
import {CalendarDate} from './CalendarDate';
/** An interface that is compatible with any object with date fields. */
export interface AnyCalendarDate {
readonly calendar: Calendar;
readonly era: string;
readonly year: number;
readonly month: number;
readonly day: number;
copy(): this;
}
/** An interface that is compatible with any object with time fields. */
export interface AnyTime {
readonly hour: number;
readonly minute: number;
readonly second: number;
readonly millisecond: number;
copy(): this;
}
/** An interface that is compatible with any object with both date and time fields. */
export interface AnyDateTime extends AnyCalendarDate, AnyTime {}
export type CalendarIdentifier =
| 'gregory'
| 'buddhist'
| 'chinese'
| 'coptic'
| 'dangi'
| 'ethioaa'
| 'ethiopic'
| 'hebrew'
| 'indian'
| 'islamic'
| 'islamic-umalqura'
| 'islamic-tbla'
| 'islamic-civil'
| 'islamic-rgsa'
| 'iso8601'
| 'japanese'
| 'persian'
| 'roc';
/**
* The Calendar interface represents a calendar system, including information
* about how days, months, years, and eras are organized, and methods to perform
* arithmetic on dates.
*/
export interface Calendar {
/**
* A string identifier for the calendar, as defined by Unicode CLDR. See
* [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/supportedValuesOf#supported_calendar_types).
*/
identifier: CalendarIdentifier;
/** Creates a CalendarDate in this calendar from the given Julian day number. */
fromJulianDay(jd: number): CalendarDate;
/** Converts a date in this calendar to a Julian day number. */
toJulianDay(date: AnyCalendarDate): number;
/** Returns the number of days in the month of the given date. */
getDaysInMonth(date: AnyCalendarDate): number;
/** Returns the number of months in the year of the given date. */
getMonthsInYear(date: AnyCalendarDate): number;
/** Returns the number of years in the era of the given date. */
getYearsInEra(date: AnyCalendarDate): number;
/** Returns a list of era identifiers for the calendar. */
getEras(): string[];
/**
* Returns the minimum month number of the given date's year.
* Normally, this is 1, but in some calendars such as the Japanese,
* eras may begin in the middle of a year.
*/
getMinimumMonthInYear?(date: AnyCalendarDate): number;
/**
* Returns the minimum day number of the given date's month.
* Normally, this is 1, but in some calendars such as the Japanese,
* eras may begin in the middle of a month.
*/
getMinimumDayInMonth?(date: AnyCalendarDate): number;
/** Returns the maximum months across all years. */
getMaximumMonthsInYear(): number;
/** Returns the maximum days across all months. */
getMaximumDaysInMonth(): number;
/**
* Returns a date that is the first day of the month for the given date.
* This is used to determine the month that the given date falls in, if
* the calendar has months that do not align with the standard calendar months
* (e.g. fiscal calendars).
*/
getFormattableMonth?(date: AnyCalendarDate): CalendarDate;
/** Returns whether the given calendar is the same as this calendar. */
isEqual?(calendar: Calendar): boolean;
/** @private */
balanceDate?(date: AnyCalendarDate): void;
/** @private */
balanceYearMonth?(date: AnyCalendarDate, previousDate: AnyCalendarDate): void;
/** @private */
constrainDate?(date: AnyCalendarDate): void;
/** @private */
isInverseEra?(date: AnyCalendarDate): boolean;
}
/** Represents an amount of time in calendar-specific units, for use when performing arithmetic. */
export interface DateDuration {
/** The number of years to add or subtract. */
years?: number;
/** The number of months to add or subtract. */
months?: number;
/** The number of weeks to add or subtract. */
weeks?: number;
/** The number of days to add or subtract. */
days?: number;
}
/** Represents an amount of time, for use whe performing arithmetic. */
export interface TimeDuration {
/** The number of hours to add or subtract. */
hours?: number;
/** The number of minutes to add or subtract. */
minutes?: number;
/** The number of seconds to add or subtract. */
seconds?: number;
/** The number of milliseconds to add or subtract. */
milliseconds?: number;
}
/**
* Represents an amount of time with both date and time components, for use when performing
* arithmetic.
*/
export interface DateTimeDuration extends DateDuration, TimeDuration {}
export interface DateFields {
era?: string;
year?: number;
month?: number;
day?: number;
}
export interface TimeFields {
hour?: number;
minute?: number;
second?: number;
millisecond?: number;
}
export type DateField = keyof DateFields;
export type TimeField = keyof TimeFields;
export type Disambiguation = 'compatible' | 'earlier' | 'later' | 'reject';
export interface CycleOptions {
/** Whether to round the field value to the nearest interval of the amount. */
round?: boolean;
}
export interface CycleTimeOptions extends CycleOptions {
/**
* Whether to use 12 or 24 hour time. If 12 hour time is chosen, the resulting value
* will remain in the same day period as the original value (e.g. if the value is AM,
* the resulting value also be AM).
*
* @default 24
*/
hourCycle?: 12 | 24;
}