143 lines
4.8 KiB
Plaintext
143 lines
4.8 KiB
Plaintext
/*
|
|
* 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 {}
|
|
|
|
/**
|
|
* 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. */
|
|
identifier: string,
|
|
|
|
/** 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,
|
|
|
|
/** @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
|
|
}
|