/* ----------------------------------------------------------------------------------------------- * Reusable types * ---------------------------------------------------------------------------------------------*/ export type DateDisplayFormat = "full" | "3-chars" | "1-char"; export type DateFormat = Date | number | string; export type TimeArray = [ year: number, month: number, day?: number, hour?: number, minute?: number, second?: number, millisecond?: number, ]; export type DateArgument = DateFormat | TimeArray; /* ----------------------------------------------------------------------------------------------- * Days * ---------------------------------------------------------------------------------------------*/ export type DayType = { dayOfWeek: Days; weekDayIndex: number; // 0 - 6, where 0 is Sunday dayOfMonth: number; // 1-(31|30|29|28) month: Months; monthIndex: number; // 0 - 11, where 0 is January day: Date; }; export enum Days { SUNDAY = "Sunday", MONDAY = "Monday", TUESDAY = "Tuesday", WEDNESDAY = "Wednesday", THURSDAY = "Thursday", FRIDAY = "Friday", SATURDAY = "Saturday", } export const DaysEnumeration = { [Days.SUNDAY]: 0, [Days.MONDAY]: 1, [Days.TUESDAY]: 2, [Days.WEDNESDAY]: 3, [Days.THURSDAY]: 4, [Days.FRIDAY]: 5, [Days.SATURDAY]: 6, }; /* ----------------------------------------------------------------------------------------------- * WEEKS * ---------------------------------------------------------------------------------------------*/ export type WeekType = { weekOfYear: number; relatedYear: number; startDayOfWeek: Date; endDateOfWeek: Date; days: DayType[]; }; /* ----------------------------------------------------------------------------------------------- * Month * ---------------------------------------------------------------------------------------------*/ export enum MonthsEnumeration { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, } export enum Months { JANUARY = "January", FEBRUARY = "February", MARCH = "March", APRIL = "April", MAY = "May", JUNE = "June", JULY = "July", AUGUST = "August", SEPTEMBER = "September", OCTOBER = "October", NOVEMBER = "November", DECEMBER = "December", } export type MonthNameFormat = DateDisplayFormat; export type MonthType = { monthIndex: number; // 0 - 11, where 0 is January year: number; monthName: Months; weeks: WeekType[]; days: DayType[]; }; /* ----------------------------------------------------------------------------------------------- * Time * ---------------------------------------------------------------------------------------------*/ export enum Time { MILLISECOND = 1, SECOND = 1e3, MINUTE = 6e4, HOUR = 3.6e6, DAY = 8.64e7, WEEK = 6.048e8, FMONTH = 2.4192e9, // f - February FLEAPMONTH = 2.5056e9, MONTH30 = 2.592e9, MONTH31 = 2.6784e9, YEAR = 3.1536e10, YEARLEAP = 3.16224e10, } export const TimeEnumeration = { [Time.MILLISECOND]: 0, [Time.SECOND]: 1, [Time.MINUTE]: 2, [Time.HOUR]: 3, [Time.DAY]: 4, [Time.WEEK]: 5, [Time.FMONTH]: 6, [Time.FLEAPMONTH]: 7, [Time.MONTH30]: 8, [Time.MONTH31]: 9, [Time.YEAR]: 10, [Time.YEARLEAP]: 11, }; export type TimeKeys = Lowercase;