types.d.mts 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. import type { Locale } from "./locale/types.js";
  2. export type * from "./locale/types.js";
  3. export type * from "./fp/types.js";
  4. /**
  5. * The generic date constructor. Replicates the Date constructor. Used to build
  6. * generic functions.
  7. *
  8. * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
  9. */
  10. export interface GenericDateConstructor<DateType extends Date = Date> {
  11. /**
  12. * The date constructor. Creates date with the current date and time.
  13. *
  14. * @returns The date instance
  15. */
  16. new (): DateType;
  17. /**
  18. * The date constructor. Creates date with the passed date, number of
  19. * milliseconds or string to parse.
  20. *
  21. * @param value - The date, number of milliseconds or string to parse
  22. *
  23. * @returns The date instance
  24. */
  25. new (value: Date | number | string): DateType;
  26. /**
  27. * The date constructor. Creates date with the passed date values (year,
  28. * month, etc.) Note that the month is 0-indexed.
  29. *
  30. * @param year - The year
  31. * @param month - The month. Note that the month is 0-indexed.
  32. * @param date - The day of the month
  33. * @param hours - The hours
  34. * @param minutes - The minutes
  35. * @param seconds - The seconds
  36. * @param ms - The milliseconds
  37. *
  38. * @returns The date instance
  39. */
  40. new (
  41. year: number,
  42. month: number,
  43. date?: number,
  44. hours?: number,
  45. minutes?: number,
  46. seconds?: number,
  47. ms?: number,
  48. ): DateType;
  49. }
  50. /**
  51. * The duration object. Contains the duration in the units specified by the
  52. * object.
  53. */
  54. export interface Duration {
  55. /** The number of years in the duration */
  56. years?: number;
  57. /** The number of months in the duration */
  58. months?: number;
  59. /** The number of weeks in the duration */
  60. weeks?: number;
  61. /** The number of days in the duration */
  62. days?: number;
  63. /** The number of hours in the duration */
  64. hours?: number;
  65. /** The number of minutes in the duration */
  66. minutes?: number;
  67. /** The number of seconds in the duration */
  68. seconds?: number;
  69. }
  70. /**
  71. * The duration unit type alias.
  72. */
  73. export type DurationUnit = keyof Duration;
  74. /**
  75. * An object that combines two dates to represent the time interval.
  76. *
  77. * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).
  78. */
  79. export interface Interval<DateType extends Date = Date> {
  80. /** The start of the interval. */
  81. start: DateType | number | string;
  82. /** The end of the interval. */
  83. end: DateType | number | string;
  84. }
  85. /**
  86. * A version of {@link Interval} that has both start and end resolved to Date.
  87. */
  88. export interface NormalizedInterval<DateType extends Date = Date> {
  89. /** The start of the interval. */
  90. start: DateType;
  91. /** The end of the interval. */
  92. end: DateType;
  93. }
  94. /**
  95. * The era. Can be either 0 (AD - Anno Domini) or 1 (BC - Before Christ).
  96. */
  97. export type Era = 0 | 1;
  98. /**
  99. * The year quarter. Goes from 1 to 4.
  100. */
  101. export type Quarter = 1 | 2 | 3 | 4;
  102. /**
  103. * The day of the week type alias. Unlike the date (the number of days since
  104. * the beginning of the month), which begins with 1 and is dynamic (can go up to
  105. * 28, 30, or 31), the day starts with 0 and static (always ends at 6). Look at
  106. * it as an index in an array where Sunday is the first element and Saturday
  107. * is the last.
  108. */
  109. export type Day = 0 | 1 | 2 | 3 | 4 | 5 | 6;
  110. /**
  111. * The month type alias. Goes from 0 to 11, where 0 is January and 11 is
  112. * December.
  113. */
  114. export type Month = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
  115. /**
  116. * FirstWeekContainsDate is used to determine which week is the first week of
  117. * the year, based on what day the January, 1 is in that week.
  118. *
  119. * The day in that week can only be 1 (Monday) or 4 (Thursday).
  120. *
  121. * Please see https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system for more information.
  122. */
  123. export type FirstWeekContainsDate = 1 | 4;
  124. /**
  125. * The date values, used to set or get date object values.
  126. */
  127. export interface DateValues {
  128. /** The year */
  129. year?: number;
  130. /** The month */
  131. month?: number;
  132. /** The day of the month */
  133. date?: number;
  134. /** The hours */
  135. hours?: number;
  136. /** The minutes */
  137. minutes?: number;
  138. /** The seconds */
  139. seconds?: number;
  140. /** The milliseconds */
  141. milliseconds?: number;
  142. }
  143. /**
  144. * The number rounding method.
  145. */
  146. export type RoundingMethod = "ceil" | "floor" | "round" | "trunc";
  147. /**
  148. * The ISO string format.
  149. *
  150. * - basic: Minimal number of separators
  151. * - extended: With separators added to enhance human readability
  152. */
  153. export type ISOStringFormat = "extended" | "basic";
  154. /**
  155. * The ISO date representation. Represents which component the string includes,
  156. * date, time or both.
  157. */
  158. export type ISOStringRepresentation = "complete" | "date" | "time";
  159. /**
  160. * The step function options. Used to build function options.
  161. */
  162. export interface StepOptions {
  163. /** The step to use when iterating */
  164. step?: number;
  165. }
  166. /**
  167. * The week function options. Used to build function options.
  168. */
  169. export interface WeekOptions {
  170. /** Which day the week starts on. */
  171. weekStartsOn?: Day;
  172. }
  173. /**
  174. * The first week contains date options. Used to build function options.
  175. */
  176. export interface FirstWeekContainsDateOptions {
  177. /** See {@link FirstWeekContainsDate} for more details. */
  178. firstWeekContainsDate?: FirstWeekContainsDate;
  179. }
  180. /**
  181. * The localized function options. Used to build function options.
  182. *
  183. * @typeParam LocaleFields - The locale fields used in the relevant function. Defines the minimum set of locale fields that must be provided.
  184. */
  185. export interface LocalizedOptions<LocaleFields extends keyof Locale> {
  186. /** The locale to use in the function. */
  187. locale?: Pick<Locale, LocaleFields>;
  188. }
  189. /**
  190. * The ISO format function options. Used to build function options.
  191. */
  192. export interface ISOFormatOptions {
  193. /** The format to use: basic with minimal number of separators or extended
  194. * with separators added to enhance human readability */
  195. format?: ISOStringFormat;
  196. /** The date representation - what component to format: date, time\
  197. * or both (complete) */
  198. representation?: ISOStringRepresentation;
  199. }
  200. /**
  201. * The rounding options. Used to build function options.
  202. */
  203. export interface RoundingOptions {
  204. /** The rounding method to use */
  205. roundingMethod?: RoundingMethod;
  206. }
  207. /**
  208. * Additional tokens options. Used to build function options.
  209. */
  210. export interface AdditionalTokensOptions {
  211. /** If true, allows usage of the week-numbering year tokens `YY` and `YYYY`.
  212. * See: https://date-fns.org/docs/Unicode-Tokens */
  213. useAdditionalWeekYearTokens?: boolean;
  214. /** If true, allows usage of the day of year tokens `D` and `DD`.
  215. * See: https://date-fns.org/docs/Unicode-Tokens */
  216. useAdditionalDayOfYearTokens?: boolean;
  217. }
  218. /**
  219. * Nearest minute type. Goes from 1 to 30, where 1 is the nearest minute and 30
  220. * is nearest half an hour.
  221. */
  222. export type NearestMinutes =
  223. | 1
  224. | 2
  225. | 3
  226. | 4
  227. | 5
  228. | 6
  229. | 7
  230. | 8
  231. | 9
  232. | 10
  233. | 11
  234. | 12
  235. | 13
  236. | 14
  237. | 15
  238. | 16
  239. | 17
  240. | 18
  241. | 19
  242. | 20
  243. | 21
  244. | 22
  245. | 23
  246. | 24
  247. | 25
  248. | 26
  249. | 27
  250. | 28
  251. | 29
  252. | 30;
  253. /**
  254. * Nearest hour type. Goes from 1 to 12, where 1 is the nearest hour and 12
  255. * is nearest half a day.
  256. */
  257. export type NearestHours = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
  258. /**
  259. * The nearest minutes function options. Used to build function options.
  260. *
  261. * @deprecated Use {@link NearestToUnitOptions} instead.
  262. */
  263. export type NearestMinutesOptions = NearestToUnitOptions<NearestMinutes>;
  264. /**
  265. * The nearest unit function options. Used to build function options.
  266. */
  267. export interface NearestToUnitOptions<Unit extends number> {
  268. /** The nearest unit to round to. E.g. for minutes `15` to round to quarter
  269. * hours. */
  270. nearestTo?: Unit;
  271. }