@northguild/gmt 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/README.md +462 -22
  2. package/dist/calendar/calculate/bucketRange.d.ts +3 -3
  3. package/dist/calendar/calculate/bucketRange.js +6 -6
  4. package/dist/calendar/calculate/floorToZone.d.ts +5 -3
  5. package/dist/calendar/calculate/floorToZone.js +6 -5
  6. package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
  7. package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
  8. package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
  9. package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
  10. package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
  11. package/dist/calendar/calculate/getOrdinalDate.js +2 -3
  12. package/dist/calendar/calculate/getQuarter.d.ts +21 -9
  13. package/dist/calendar/calculate/getQuarter.js +8 -12
  14. package/dist/calendar/hours/addOperatingTime.d.ts +53 -0
  15. package/dist/calendar/hours/addOperatingTime.js +59 -0
  16. package/dist/calendar/hours/index.d.ts +7 -0
  17. package/dist/calendar/hours/index.js +7 -0
  18. package/dist/calendar/hours/isOpenAt.d.ts +39 -0
  19. package/dist/calendar/hours/isOpenAt.js +44 -0
  20. package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
  21. package/dist/calendar/hours/nextCloseAt.js +51 -0
  22. package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
  23. package/dist/calendar/hours/nextOpenAt.js +47 -0
  24. package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
  25. package/dist/calendar/hours/operatingIntervals.js +52 -0
  26. package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
  27. package/dist/calendar/hours/operatingTimeBetween.js +49 -0
  28. package/dist/calendar/hours/recurringWindows.d.ts +61 -0
  29. package/dist/calendar/hours/recurringWindows.js +80 -0
  30. package/dist/calendar/index.d.ts +1 -0
  31. package/dist/calendar/index.js +1 -0
  32. package/dist/duration/calculate/durationAs.d.ts +13 -8
  33. package/dist/duration/calculate/durationAs.js +4 -8
  34. package/dist/duration/compare/compareDurations.d.ts +12 -6
  35. package/dist/duration/compare/compareDurations.js +3 -6
  36. package/dist/duration/format/formatDuration.d.ts +16 -4
  37. package/dist/duration/format/formatDuration.js +4 -5
  38. package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
  39. package/dist/duration/normalize/normalizeDuration.js +6 -15
  40. package/dist/duration/parse/parseDuration.d.ts +21 -3
  41. package/dist/duration/parse/parseDuration.js +1 -3
  42. package/dist/instant/convert/classifyLocal.d.ts +1 -1
  43. package/dist/instant/convert/classifyLocal.js +1 -1
  44. package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
  45. package/dist/instant/convert/fromOffsetInstant.js +3 -1
  46. package/dist/instant/convert/resolveLocal.d.ts +12 -7
  47. package/dist/instant/convert/resolveLocal.js +6 -10
  48. package/dist/instant/convert/toOffsetInstant.d.ts +22 -9
  49. package/dist/instant/convert/toOffsetInstant.js +10 -3
  50. package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
  51. package/dist/intermodal/calculate/billingTimeline.js +2 -2
  52. package/dist/intermodal/calculate/chargeableDays.d.ts +13 -11
  53. package/dist/intermodal/calculate/chargeableDays.js +4 -9
  54. package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
  55. package/dist/intermodal/calculate/demurrageClock.js +7 -7
  56. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +5 -4
  57. package/dist/intermodal/calculate/freeTimeExpiry.js +6 -6
  58. package/dist/internal/businessCalendar.d.ts +5 -0
  59. package/dist/internal/businessCalendar.js +5 -1
  60. package/dist/internal/cycleFieldValue.d.ts +6 -4
  61. package/dist/internal/cycleFieldValue.js +6 -4
  62. package/dist/internal/daylightTime.d.ts +33 -0
  63. package/dist/internal/daylightTime.js +164 -0
  64. package/dist/internal/durationUntilString.js +4 -3
  65. package/dist/internal/englishCalendarNames.js +1 -2
  66. package/dist/internal/epochNanoseconds.d.ts +2 -0
  67. package/dist/internal/epochNanoseconds.js +2 -0
  68. package/dist/internal/exactDuration.d.ts +37 -0
  69. package/dist/internal/exactDuration.js +64 -0
  70. package/dist/internal/exactMoment.d.ts +72 -0
  71. package/dist/internal/exactMoment.js +114 -0
  72. package/dist/internal/fiscalCalendar.d.ts +4 -3
  73. package/dist/internal/fiscalCalendar.js +4 -3
  74. package/dist/internal/formatCalendarDays.d.ts +2 -2
  75. package/dist/internal/formatRelativeDuration.d.ts +21 -1
  76. package/dist/internal/formatRelativeDuration.js +47 -7
  77. package/dist/internal/index.d.ts +9 -4
  78. package/dist/internal/index.js +9 -4
  79. package/dist/internal/instantFormatOptions.js +2 -1
  80. package/dist/internal/instantNanoseconds.d.ts +75 -9
  81. package/dist/internal/instantNanoseconds.js +192 -11
  82. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  83. package/dist/internal/monthGridWeekRow.d.ts +2 -1
  84. package/dist/internal/monthGridWeekRow.js +2 -1
  85. package/dist/internal/normalizeTimeZone.d.ts +2 -2
  86. package/dist/internal/normalizeTimeZone.js +2 -2
  87. package/dist/internal/operatingSchedule.d.ts +129 -0
  88. package/dist/internal/operatingSchedule.js +668 -0
  89. package/dist/internal/optionOrDefault.d.ts +18 -0
  90. package/dist/internal/optionOrDefault.js +20 -0
  91. package/dist/internal/patternToken.d.ts +2 -2
  92. package/dist/internal/patternToken.js +28 -13
  93. package/dist/internal/plainDateUntil.js +10 -6
  94. package/dist/internal/punctuality.d.ts +38 -0
  95. package/dist/internal/punctuality.js +59 -0
  96. package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
  97. package/dist/internal/readDateTimeFormatOptions.js +93 -0
  98. package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
  99. package/dist/internal/resolveDurationRelativeTo.js +11 -1
  100. package/dist/internal/resolveRelativeRounding.d.ts +17 -6
  101. package/dist/internal/resolveRelativeRounding.js +27 -7
  102. package/dist/internal/resolveRelativeUnit.d.ts +30 -0
  103. package/dist/internal/resolveRelativeUnit.js +40 -0
  104. package/dist/internal/splitStep.d.ts +24 -1
  105. package/dist/internal/splitStep.js +34 -2
  106. package/dist/internal/startOrEndOfZoned.js +2 -3
  107. package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
  108. package/dist/internal/temporalCompat/capabilities.js +35 -3
  109. package/dist/internal/temporalCompat/fieldSearch.js +1 -1
  110. package/dist/internal/temporalCompat/index.d.ts +1 -1
  111. package/dist/internal/temporalCompat/index.js +1 -1
  112. package/dist/internal/temporalCompat/repros.d.ts +1 -1
  113. package/dist/internal/temporalCompat/repros.js +157 -0
  114. package/dist/internal/timestampEvents.d.ts +32 -0
  115. package/dist/internal/timestampEvents.js +76 -0
  116. package/dist/internal/utcZonedDateTime.d.ts +5 -2
  117. package/dist/internal/utcZonedDateTime.js +8 -5
  118. package/dist/internal/zonedBucket.js +8 -6
  119. package/dist/internal/zonedLocalDates.js +1 -1
  120. package/dist/internal/zonedTransitionSearch.d.ts +27 -0
  121. package/dist/internal/zonedTransitionSearch.js +218 -0
  122. package/dist/internal/zonedWallClock.d.ts +21 -7
  123. package/dist/internal/zonedWallClock.js +87 -18
  124. package/dist/internal/zonedWallClockOperations.d.ts +26 -13
  125. package/dist/internal/zonedWallClockOperations.js +87 -34
  126. package/dist/interval/validate/isValidInterval.d.ts +6 -3
  127. package/dist/interval/validate/isValidInterval.js +6 -3
  128. package/dist/plain/calculate/addDate.d.ts +11 -8
  129. package/dist/plain/calculate/addDate.js +5 -8
  130. package/dist/plain/calculate/addDateTime.d.ts +7 -4
  131. package/dist/plain/calculate/addDateTime.js +1 -4
  132. package/dist/plain/calculate/cycleDate.d.ts +16 -7
  133. package/dist/plain/calculate/cycleDate.js +3 -7
  134. package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
  135. package/dist/plain/calculate/cycleDateTime.js +1 -4
  136. package/dist/plain/calculate/cycleTime.d.ts +10 -5
  137. package/dist/plain/calculate/cycleTime.js +3 -5
  138. package/dist/plain/calculate/diffDate.d.ts +1 -1
  139. package/dist/plain/calculate/diffDate.js +1 -1
  140. package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
  141. package/dist/plain/calculate/diffDateAsDuration.js +1 -1
  142. package/dist/plain/calculate/diffDateTime.d.ts +1 -1
  143. package/dist/plain/calculate/diffDateTime.js +1 -1
  144. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
  145. package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
  146. package/dist/plain/calculate/diffTime.d.ts +1 -1
  147. package/dist/plain/calculate/diffTime.js +1 -1
  148. package/dist/plain/calculate/endOfDate.d.ts +8 -3
  149. package/dist/plain/calculate/endOfDate.js +1 -3
  150. package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
  151. package/dist/plain/calculate/endOfDateTime.js +1 -5
  152. package/dist/plain/calculate/endOfTime.d.ts +8 -2
  153. package/dist/plain/calculate/endOfTime.js +1 -2
  154. package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
  155. package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
  156. package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
  157. package/dist/plain/calculate/getWeekOfMonth.js +7 -4
  158. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
  159. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
  160. package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
  161. package/dist/plain/calculate/getWeeksInMonth.js +5 -2
  162. package/dist/plain/calculate/nextWeekday.d.ts +7 -3
  163. package/dist/plain/calculate/nextWeekday.js +1 -3
  164. package/dist/plain/calculate/previousWeekday.d.ts +7 -3
  165. package/dist/plain/calculate/previousWeekday.js +1 -3
  166. package/dist/plain/calculate/roundDate.d.ts +20 -7
  167. package/dist/plain/calculate/roundDate.js +3 -10
  168. package/dist/plain/calculate/roundDateTime.d.ts +22 -8
  169. package/dist/plain/calculate/roundDateTime.js +3 -11
  170. package/dist/plain/calculate/roundTime.d.ts +20 -4
  171. package/dist/plain/calculate/roundTime.js +3 -7
  172. package/dist/plain/calculate/setDate.d.ts +7 -5
  173. package/dist/plain/calculate/setDate.js +1 -5
  174. package/dist/plain/calculate/setDateTime.d.ts +8 -5
  175. package/dist/plain/calculate/setDateTime.js +1 -5
  176. package/dist/plain/calculate/setTime.d.ts +10 -6
  177. package/dist/plain/calculate/setTime.js +4 -6
  178. package/dist/plain/calculate/startOfDate.d.ts +8 -2
  179. package/dist/plain/calculate/startOfDate.js +1 -2
  180. package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
  181. package/dist/plain/calculate/startOfDateTime.js +1 -2
  182. package/dist/plain/calculate/startOfTime.d.ts +8 -1
  183. package/dist/plain/calculate/startOfTime.js +1 -1
  184. package/dist/plain/calculate/subtractDate.d.ts +7 -4
  185. package/dist/plain/calculate/subtractDate.js +1 -4
  186. package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
  187. package/dist/plain/calculate/subtractDateTime.js +1 -4
  188. package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
  189. package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
  190. package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
  191. package/dist/plain/compare/areDatesEqualBy.js +8 -6
  192. package/dist/plain/compare/isBetweenDate.d.ts +13 -2
  193. package/dist/plain/compare/isBetweenDate.js +4 -4
  194. package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
  195. package/dist/plain/compare/isBetweenDateTime.js +4 -4
  196. package/dist/plain/compare/isBetweenTime.d.ts +13 -2
  197. package/dist/plain/compare/isBetweenTime.js +4 -4
  198. package/dist/plain/compare/isRelativeDay.d.ts +1 -1
  199. package/dist/plain/compare/isRelativeDay.js +1 -1
  200. package/dist/plain/compare/isThisUnit.d.ts +1 -1
  201. package/dist/plain/compare/isThisUnit.js +1 -1
  202. package/dist/plain/format/formatCalendar.d.ts +21 -14
  203. package/dist/plain/format/formatCalendar.js +21 -16
  204. package/dist/plain/format/formatDate.js +5 -3
  205. package/dist/plain/format/formatDateRange.js +4 -2
  206. package/dist/plain/format/formatDateTime.js +4 -2
  207. package/dist/plain/format/formatDateTimeRange.js +4 -2
  208. package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
  209. package/dist/plain/format/formatDateTimeToParts.js +10 -6
  210. package/dist/plain/format/formatDateToParts.d.ts +13 -2
  211. package/dist/plain/format/formatDateToParts.js +8 -4
  212. package/dist/plain/format/formatRelativeDate.d.ts +16 -3
  213. package/dist/plain/format/formatRelativeDate.js +26 -15
  214. package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
  215. package/dist/plain/format/formatRelativeDateTime.js +8 -5
  216. package/dist/plain/format/formatRelativeTime.d.ts +16 -3
  217. package/dist/plain/format/formatRelativeTime.js +21 -13
  218. package/dist/plain/format/formatTime.js +4 -2
  219. package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
  220. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
  221. package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
  222. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
  223. package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
  224. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
  225. package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
  226. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
  227. package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
  228. package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
  229. package/dist/plain/interval/intervalFromDurationDate.js +1 -3
  230. package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
  231. package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
  232. package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
  233. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
  234. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
  235. package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
  236. package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
  237. package/dist/plain/interval/intervalSplitAtDate.js +2 -0
  238. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
  239. package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
  240. package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
  241. package/dist/plain/interval/intervalSplitAtTime.js +2 -0
  242. package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
  243. package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
  244. package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
  245. package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
  246. package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
  247. package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
  248. package/dist/plain/interval/intervalXorDate.d.ts +9 -0
  249. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
  250. package/dist/plain/interval/intervalXorTime.d.ts +9 -0
  251. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
  252. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
  253. package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
  254. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
  255. package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
  256. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
  257. package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
  258. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
  259. package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
  260. package/dist/plain/map/mapDatesInRange.d.ts +8 -4
  261. package/dist/plain/map/mapDatesInRange.js +1 -4
  262. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
  263. package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
  264. package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
  265. package/dist/plain/parse/parseDateWithPattern.js +10 -7
  266. package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
  267. package/dist/plain/parse/parseTimeWithPattern.js +10 -7
  268. package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
  269. package/dist/plain/parse/parseUnitFromDate.js +3 -3
  270. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  271. package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
  272. package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
  273. package/dist/plain/parse/parseWeekFromDate.js +2 -6
  274. package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
  275. package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
  276. package/dist/plain/validate/isValidDateRange.d.ts +19 -4
  277. package/dist/plain/validate/isValidDateRange.js +1 -4
  278. package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
  279. package/dist/plain/validate/isValidDateTimeRange.js +2 -5
  280. package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
  281. package/dist/plain/validate/isValidTimeRange.js +2 -5
  282. package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
  283. package/dist/precision/convert/fromExcelSerial.js +4 -5
  284. package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
  285. package/dist/precision/convert/fromNanoseconds.js +1 -1
  286. package/dist/precision/convert/toExcelSerial.d.ts +9 -3
  287. package/dist/precision/convert/toExcelSerial.js +3 -4
  288. package/dist/precision/convert/toNanoseconds.d.ts +11 -6
  289. package/dist/precision/convert/toNanoseconds.js +11 -6
  290. package/dist/precision/validate/isValidInstant.d.ts +12 -3
  291. package/dist/precision/validate/isValidInstant.js +12 -3
  292. package/dist/span/calculate/spanMs.d.ts +10 -4
  293. package/dist/span/calculate/spanMs.js +10 -4
  294. package/dist/span/calculate/spanNs.d.ts +10 -4
  295. package/dist/span/calculate/spanNs.js +10 -4
  296. package/dist/span/validate/isValidSpan.d.ts +8 -3
  297. package/dist/span/validate/isValidSpan.js +8 -3
  298. package/dist/transport/calculate/bestAvailable.d.ts +47 -0
  299. package/dist/transport/calculate/bestAvailable.js +76 -0
  300. package/dist/transport/calculate/crossingTime.d.ts +58 -0
  301. package/dist/transport/calculate/crossingTime.js +76 -0
  302. package/dist/transport/calculate/cutoffAt.d.ts +90 -0
  303. package/dist/transport/calculate/cutoffAt.js +209 -0
  304. package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
  305. package/dist/transport/calculate/cutoffSchedule.js +71 -0
  306. package/dist/transport/calculate/dwellTime.d.ts +16 -7
  307. package/dist/transport/calculate/dwellTime.js +12 -8
  308. package/dist/transport/calculate/estimateDrift.d.ts +65 -0
  309. package/dist/transport/calculate/estimateDrift.js +75 -0
  310. package/dist/transport/calculate/index.d.ts +8 -0
  311. package/dist/transport/calculate/index.js +8 -0
  312. package/dist/transport/calculate/nextDeparture.d.ts +78 -0
  313. package/dist/transport/calculate/nextDeparture.js +131 -0
  314. package/dist/transport/calculate/punctualityRate.d.ts +42 -0
  315. package/dist/transport/calculate/punctualityRate.js +59 -0
  316. package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
  317. package/dist/transport/calculate/scheduleDelivery.js +300 -0
  318. package/dist/transport/calculate/transitTime.d.ts +21 -3
  319. package/dist/transport/calculate/transitTime.js +29 -46
  320. package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
  321. package/dist/transport/compare/classifyPunctuality.js +64 -0
  322. package/dist/transport/compare/index.d.ts +4 -0
  323. package/dist/transport/compare/index.js +4 -0
  324. package/dist/transport/compare/isPastCutoff.d.ts +33 -0
  325. package/dist/transport/compare/isPastCutoff.js +48 -0
  326. package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
  327. package/dist/transport/compare/scheduleDeviation.js +53 -0
  328. package/dist/transport/compare/timeToCutoff.d.ts +31 -0
  329. package/dist/transport/compare/timeToCutoff.js +47 -0
  330. package/dist/transport/convert/etaAtZone.d.ts +7 -0
  331. package/dist/transport/convert/etaAtZone.js +9 -4
  332. package/dist/transport/index.d.ts +1 -0
  333. package/dist/transport/index.js +1 -0
  334. package/dist/types/business-calendar.d.ts +19 -14
  335. package/dist/types/calendar-options.d.ts +15 -3
  336. package/dist/types/date-cycle-field.d.ts +5 -0
  337. package/dist/types/date-duration-unit.d.ts +4 -0
  338. package/dist/types/date-time-cycle-field.d.ts +4 -0
  339. package/dist/types/date-time-duration-units.d.ts +4 -0
  340. package/dist/types/date-time-unit.d.ts +4 -0
  341. package/dist/types/date-unit.d.ts +4 -0
  342. package/dist/types/disambiguation.d.ts +8 -0
  343. package/dist/types/duration-relative-to.d.ts +8 -0
  344. package/dist/types/duration-string-options.d.ts +28 -0
  345. package/dist/types/fiscal-calendar.d.ts +1 -1
  346. package/dist/types/fractional-digit.d.ts +5 -0
  347. package/dist/types/free-time-options.d.ts +21 -11
  348. package/dist/types/index.d.ts +2 -1
  349. package/dist/types/index.js +2 -1
  350. package/dist/types/interval.d.ts +8 -1
  351. package/dist/types/offset.d.ts +9 -0
  352. package/dist/types/operating-schedule.d.ts +71 -0
  353. package/dist/types/overflow.d.ts +6 -0
  354. package/dist/types/relative-rounding-method.d.ts +6 -0
  355. package/dist/types/relative-time-options.d.ts +33 -5
  356. package/dist/types/rounding-options.d.ts +27 -0
  357. package/dist/types/time-cycle-field.d.ts +4 -0
  358. package/dist/types/time-duration-unit.d.ts +4 -0
  359. package/dist/types/time-unit.d.ts +4 -0
  360. package/dist/types/transport-timestamps.d.ts +54 -0
  361. package/dist/types/transport-timestamps.js +0 -0
  362. package/dist/unix/calculate/addUnix.d.ts +19 -5
  363. package/dist/unix/calculate/addUnix.js +1 -5
  364. package/dist/unix/calculate/diffUnix.d.ts +13 -3
  365. package/dist/unix/calculate/diffUnix.js +1 -3
  366. package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
  367. package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
  368. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
  369. package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
  370. package/dist/unix/calculate/endOfUnix.d.ts +20 -4
  371. package/dist/unix/calculate/endOfUnix.js +1 -4
  372. package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
  373. package/dist/unix/calculate/isBetweenUnix.js +4 -6
  374. package/dist/unix/calculate/roundUnix.d.ts +31 -3
  375. package/dist/unix/calculate/roundUnix.js +3 -6
  376. package/dist/unix/calculate/setUnix.d.ts +35 -9
  377. package/dist/unix/calculate/setUnix.js +4 -13
  378. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
  379. package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
  380. package/dist/unix/calculate/startOfUnix.d.ts +20 -4
  381. package/dist/unix/calculate/startOfUnix.js +1 -4
  382. package/dist/unix/calculate/subtractUnix.d.ts +19 -5
  383. package/dist/unix/calculate/subtractUnix.js +1 -5
  384. package/dist/unix/compare/areUnixEqual.d.ts +7 -1
  385. package/dist/unix/compare/areUnixEqual.js +1 -1
  386. package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
  387. package/dist/unix/compare/areUnixEqualBy.js +13 -9
  388. package/dist/unix/compare/isAfterUnix.d.ts +7 -1
  389. package/dist/unix/compare/isAfterUnix.js +1 -1
  390. package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
  391. package/dist/unix/compare/isBeforeUnix.js +1 -1
  392. package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
  393. package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
  394. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
  395. package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
  396. package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
  397. package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
  398. package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
  399. package/dist/unix/convert/convertUnixToUtc.js +3 -4
  400. package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
  401. package/dist/unix/convert/convertUnixToZoned.js +4 -5
  402. package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
  403. package/dist/unix/format/formatCalendarUnix.js +4 -5
  404. package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
  405. package/dist/unix/format/formatRelativeUnix.js +3 -5
  406. package/dist/unix/format/formatUnix.d.ts +24 -6
  407. package/dist/unix/format/formatUnix.js +8 -7
  408. package/dist/unix/get/getUnixNow.d.ts +8 -3
  409. package/dist/unix/get/getUnixNow.js +1 -3
  410. package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
  411. package/dist/unix/interval/intervalCountUnix.js +2 -5
  412. package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
  413. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
  414. package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
  415. package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
  416. package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
  417. package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
  418. package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
  419. package/dist/unix/interval/intervalLengthUnix.js +4 -6
  420. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
  421. package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
  422. package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
  423. package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
  424. package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
  425. package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
  426. package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
  427. package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
  428. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
  429. package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
  430. package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
  431. package/dist/unix/parse/parseDateFromUnix.js +1 -2
  432. package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
  433. package/dist/unix/parse/parseDayFromUnix.js +2 -2
  434. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
  435. package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
  436. package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
  437. package/dist/unix/parse/parseHourFromUnix.js +2 -2
  438. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
  439. package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
  440. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
  441. package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
  442. package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
  443. package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
  444. package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
  445. package/dist/unix/parse/parseMonthFromUnix.js +2 -2
  446. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
  447. package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
  448. package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
  449. package/dist/unix/parse/parseSecondFromUnix.js +2 -2
  450. package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
  451. package/dist/unix/parse/parseTimeFromUnix.js +1 -2
  452. package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
  453. package/dist/unix/parse/parseUnitFromUnix.js +2 -3
  454. package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
  455. package/dist/unix/parse/parseWeekFromUnix.js +3 -7
  456. package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
  457. package/dist/unix/parse/parseYearFromUnix.js +2 -2
  458. package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
  459. package/dist/unix/validate/isValidUnixRange.js +1 -4
  460. package/dist/utc/calculate/addUtc.d.ts +7 -4
  461. package/dist/utc/calculate/addUtc.js +1 -4
  462. package/dist/utc/calculate/diffUtc.d.ts +1 -1
  463. package/dist/utc/calculate/diffUtc.js +1 -1
  464. package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
  465. package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
  466. package/dist/utc/calculate/endOfUtc.d.ts +16 -3
  467. package/dist/utc/calculate/endOfUtc.js +2 -3
  468. package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
  469. package/dist/utc/calculate/isBetweenUtc.js +4 -4
  470. package/dist/utc/calculate/roundUtc.d.ts +26 -9
  471. package/dist/utc/calculate/roundUtc.js +3 -12
  472. package/dist/utc/calculate/setUtc.d.ts +7 -4
  473. package/dist/utc/calculate/setUtc.js +1 -4
  474. package/dist/utc/calculate/startOfUtc.d.ts +15 -2
  475. package/dist/utc/calculate/startOfUtc.js +1 -2
  476. package/dist/utc/calculate/subtractUtc.d.ts +7 -4
  477. package/dist/utc/calculate/subtractUtc.js +1 -4
  478. package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
  479. package/dist/utc/compare/areUtcEqualBy.js +2 -3
  480. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
  481. package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
  482. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
  483. package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
  484. package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
  485. package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
  486. package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
  487. package/dist/utc/convert/convertUtcToUnix.js +3 -4
  488. package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
  489. package/dist/utc/convert/convertUtcToZoned.js +1 -1
  490. package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
  491. package/dist/utc/format/formatCalendarUtc.js +8 -6
  492. package/dist/utc/format/formatHttp.d.ts +1 -1
  493. package/dist/utc/format/formatHttp.js +1 -1
  494. package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
  495. package/dist/utc/format/formatRelativeUtc.js +9 -11
  496. package/dist/utc/format/formatUtc.d.ts +17 -15
  497. package/dist/utc/format/formatUtc.js +8 -8
  498. package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
  499. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
  500. package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
  501. package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
  502. package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
  503. package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
  504. package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
  505. package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
  506. package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
  507. package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
  508. package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
  509. package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
  510. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
  511. package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
  512. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
  513. package/dist/utc/parse/parseDateFromUtc.js +1 -3
  514. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
  515. package/dist/utc/parse/parseDayFromUtc.js +1 -3
  516. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
  517. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
  518. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
  519. package/dist/utc/parse/parseHourFromUtc.js +1 -3
  520. package/dist/utc/parse/parseHttp.d.ts +1 -1
  521. package/dist/utc/parse/parseHttp.js +1 -1
  522. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
  523. package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
  524. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
  525. package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
  526. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
  527. package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
  528. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
  529. package/dist/utc/parse/parseMonthFromUtc.js +1 -3
  530. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
  531. package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
  532. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
  533. package/dist/utc/parse/parseSecondFromUtc.js +1 -3
  534. package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
  535. package/dist/utc/parse/parseTimeFromUtc.js +5 -6
  536. package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
  537. package/dist/utc/parse/parseUnitFromUtc.js +6 -8
  538. package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
  539. package/dist/utc/parse/parseWeekFromUtc.js +7 -13
  540. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
  541. package/dist/utc/parse/parseYearFromUtc.js +1 -3
  542. package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
  543. package/dist/utc/validate/isValidUtcRange.js +2 -5
  544. package/dist/zoned/calculate/addZoned.d.ts +20 -10
  545. package/dist/zoned/calculate/addZoned.js +6 -13
  546. package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
  547. package/dist/zoned/calculate/cycleZoned.js +1 -8
  548. package/dist/zoned/calculate/diffZoned.d.ts +1 -1
  549. package/dist/zoned/calculate/diffZoned.js +1 -1
  550. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
  551. package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
  552. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
  553. package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
  554. package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
  555. package/dist/zoned/calculate/endOfZoned.js +2 -3
  556. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
  557. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
  558. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
  559. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
  560. package/dist/zoned/calculate/roundZoned.d.ts +21 -4
  561. package/dist/zoned/calculate/roundZoned.js +3 -7
  562. package/dist/zoned/calculate/setZoned.d.ts +25 -8
  563. package/dist/zoned/calculate/setZoned.js +4 -12
  564. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
  565. package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
  566. package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
  567. package/dist/zoned/calculate/startOfZoned.js +1 -3
  568. package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
  569. package/dist/zoned/calculate/subtractZoned.js +6 -13
  570. package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
  571. package/dist/zoned/compare/areZonedEqualBy.js +7 -5
  572. package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
  573. package/dist/zoned/compare/isBetweenZoned.js +4 -3
  574. package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
  575. package/dist/zoned/compare/isInDaylightSaving.js +40 -44
  576. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
  577. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
  578. package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
  579. package/dist/zoned/convert/convertZonedToUnix.js +2 -4
  580. package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
  581. package/dist/zoned/convert/convertZonedToZoned.js +1 -1
  582. package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
  583. package/dist/zoned/format/formatCalendarZoned.js +13 -9
  584. package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
  585. package/dist/zoned/format/formatRelativeZoned.js +7 -4
  586. package/dist/zoned/format/formatRfc2822.d.ts +2 -2
  587. package/dist/zoned/format/formatRfc2822.js +2 -2
  588. package/dist/zoned/format/formatRfc3339.d.ts +2 -3
  589. package/dist/zoned/format/formatRfc3339.js +2 -3
  590. package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
  591. package/dist/zoned/format/formatTimeZoneName.js +5 -4
  592. package/dist/zoned/format/formatZonedDateTime.js +2 -1
  593. package/dist/zoned/format/formatZonedRange.js +2 -1
  594. package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
  595. package/dist/zoned/format/formatZonedToParts.js +8 -5
  596. package/dist/zoned/get/getDstTransitions.d.ts +9 -10
  597. package/dist/zoned/get/getDstTransitions.js +12 -3
  598. package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
  599. package/dist/zoned/get/getTimeZoneOffset.js +6 -3
  600. package/dist/zoned/get/getZonedNow.d.ts +13 -1
  601. package/dist/zoned/get/getZonedNow.js +12 -3
  602. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
  603. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
  604. package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
  605. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
  606. package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
  607. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
  608. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
  609. package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
  610. package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
  611. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
  612. package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
  613. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
  614. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
  615. package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
  616. package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
  617. package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
  618. package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
  619. package/dist/zoned/parse/parseRfc2822.js +1 -1
  620. package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
  621. package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
  622. package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
  623. package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
  624. package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
  625. package/dist/zoned/validate/hasDaylightSaving.js +47 -31
  626. package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
  627. package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
  628. package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
  629. package/dist/zoned/validate/isValidZonedRange.js +1 -4
  630. package/package.json +18 -5
  631. package/skills/gmt-arithmetic/SKILL.md +1 -1
  632. package/skills/gmt-basics/SKILL.md +10 -1
  633. package/skills/gmt-integration/SKILL.md +10 -5
  634. package/skills/gmt-timezone/SKILL.md +150 -21
  635. package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
  636. package/dist/internal/resolveReadingTimeZone.js +0 -18
  637. package/dist/types/duration-unit.d.ts +0 -5
  638. /package/dist/types/{duration-unit.js → operating-schedule.js} +0 -0
@@ -15,8 +15,8 @@ import type { ZoneBucketUnit } from "../../types/index.js";
15
15
  * - The range is half-open: an `end` landing exactly on a boundary does not open that bucket.
16
16
  * A zero-length range mid-bucket still returns the one bucket holding it; on a boundary it
17
17
  * returns `[]`.
18
- * - Both endpoints are read in `timeZone`. Any bracketed zone they carry is ignored, as in
19
- * `floorToZone`.
18
+ * - Both endpoints are read in `timeZone`. A bracketed zone they carry never supplies the
19
+ * zone, as in `floorToZone`.
20
20
  * - Weeks start on Monday (ISO 8601). `unit` is the same four-unit set `floorToZone` takes,
21
21
  * singular or plural, which `isValidZoneBucketUnit` narrows.
22
22
  * - A local boundary that does not exist is not invented: the day Samoa deleted crossing the
@@ -33,7 +33,7 @@ import type { ZoneBucketUnit } from "../../types/index.js";
33
33
  * @param start ISO 8601 instant string for the range start (inclusive)
34
34
  * @param end ISO 8601 instant string for the range end (exclusive)
35
35
  * @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
36
- * @param timeZone IANA timeZone identifier the buckets are computed in
36
+ * @param timeZone IANA name or UTC offset the buckets are computed in
37
37
  * @returns array of UTC instant strings ending in "Z", or [] on invalid input
38
38
  *
39
39
  * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"]
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { nextZonedBucketStart, zonedNextTransition, zonedUnitStart, } from "../../internal/index.js";
2
+ import { instantFrom, nextZonedBucketStart, zonedNextTransition, zonedUnitStart, } from "../../internal/index.js";
3
3
  import { isValidInstant } from "../../precision/validate/index.js";
4
4
  import { isValidTimeZone } from "../../zoned/validate/index.js";
5
5
  import { isValidZoneBucketUnit } from "../validate/index.js";
@@ -93,8 +93,8 @@ function nextBucketStartWithinRange(current, unit) {
93
93
  * - The range is half-open: an `end` landing exactly on a boundary does not open that bucket.
94
94
  * A zero-length range mid-bucket still returns the one bucket holding it; on a boundary it
95
95
  * returns `[]`.
96
- * - Both endpoints are read in `timeZone`. Any bracketed zone they carry is ignored, as in
97
- * `floorToZone`.
96
+ * - Both endpoints are read in `timeZone`. A bracketed zone they carry never supplies the
97
+ * zone, as in `floorToZone`.
98
98
  * - Weeks start on Monday (ISO 8601). `unit` is the same four-unit set `floorToZone` takes,
99
99
  * singular or plural, which `isValidZoneBucketUnit` narrows.
100
100
  * - A local boundary that does not exist is not invented: the day Samoa deleted crossing the
@@ -111,7 +111,7 @@ function nextBucketStartWithinRange(current, unit) {
111
111
  * @param start ISO 8601 instant string for the range start (inclusive)
112
112
  * @param end ISO 8601 instant string for the range end (exclusive)
113
113
  * @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
114
- * @param timeZone IANA timeZone identifier the buckets are computed in
114
+ * @param timeZone IANA name or UTC offset the buckets are computed in
115
115
  * @returns array of UTC instant strings ending in "Z", or [] on invalid input
116
116
  *
117
117
  * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"]
@@ -134,8 +134,8 @@ export function bucketRange(start, end, unit, timeZone) {
134
134
  return [];
135
135
  }
136
136
  try {
137
- const startZoned = Temporal.Instant.from(start).toZonedDateTimeISO(timeZone);
138
- const endZoned = Temporal.Instant.from(end).toZonedDateTimeISO(timeZone);
137
+ const startZoned = instantFrom(start).toZonedDateTimeISO(timeZone);
138
+ const endZoned = instantFrom(end).toZonedDateTimeISO(timeZone);
139
139
  if (Temporal.ZonedDateTime.compare(startZoned, endZoned) > 0)
140
140
  return [];
141
141
  if (certainlyExceedsBucketCap(startZoned, endZoned, resolvedUnit))
@@ -1,4 +1,4 @@
1
- import { Temporal } from "@js-temporal/polyfill";
1
+ import type { Temporal } from "@js-temporal/polyfill";
2
2
  import type { ZoneBucketUnit } from "../../types/index.js";
3
3
  /**
4
4
  * Floor an instant to the start of the `unit` containing it **in `timeZone`**, and return
@@ -15,7 +15,9 @@ import type { ZoneBucketUnit } from "../../types/index.js";
15
15
  * can be told apart from a bad instant.
16
16
  * - `value` is any instant `isValidInstant` accepts — `Z`, an offset, or a bracketed zone.
17
17
  * Only its instant is read: a bracketed zone in `value` is *not* the zone the boundary is
18
- * computed in, `timeZone` is, and the two may differ freely.
18
+ * computed in, `timeZone` is, and the two may differ freely. An offset written to the minute
19
+ * that is the bracketed zone's sub-minute offset rounded (`-00:45[Africa/Monrovia]`, for
20
+ * −00:44:30) names the instant the zone gives, as `isValidInstant` describes.
19
21
  * - The boundary is a real instant in the zone, so it survives the days a local boundary does
20
22
  * not exist: a local day whose midnight is skipped by a spring-forward starts at 01:00, and
21
23
  * a wall hour repeated by a fall-back floors to whichever pass `value` was in.
@@ -25,7 +27,7 @@ import type { ZoneBucketUnit } from "../../types/index.js";
25
27
  *
26
28
  * @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
27
29
  * @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
28
- * @param timeZone IANA timeZone identifier the boundary is computed in
30
+ * @param timeZone IANA name or UTC offset the boundary is computed in
29
31
  * @returns UTC instant string ending in "Z", or "" on invalid input
30
32
  *
31
33
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "America/New_York") // "2024-06-14T04:00:00Z" (the 14 June local midnight — the instant is already 14 June there)
@@ -1,5 +1,4 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { zonedUnitStart } from "../../internal/index.js";
1
+ import { instantFrom, zonedUnitStart } from "../../internal/index.js";
3
2
  import { isValidInstant } from "../../precision/validate/index.js";
4
3
  import { isValidTimeZone } from "../../zoned/validate/index.js";
5
4
  import { isValidZoneBucketUnit } from "../validate/index.js";
@@ -19,7 +18,9 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
19
18
  * can be told apart from a bad instant.
20
19
  * - `value` is any instant `isValidInstant` accepts — `Z`, an offset, or a bracketed zone.
21
20
  * Only its instant is read: a bracketed zone in `value` is *not* the zone the boundary is
22
- * computed in, `timeZone` is, and the two may differ freely.
21
+ * computed in, `timeZone` is, and the two may differ freely. An offset written to the minute
22
+ * that is the bracketed zone's sub-minute offset rounded (`-00:45[Africa/Monrovia]`, for
23
+ * −00:44:30) names the instant the zone gives, as `isValidInstant` describes.
23
24
  * - The boundary is a real instant in the zone, so it survives the days a local boundary does
24
25
  * not exist: a local day whose midnight is skipped by a spring-forward starts at 01:00, and
25
26
  * a wall hour repeated by a fall-back floors to whichever pass `value` was in.
@@ -29,7 +30,7 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
29
30
  *
30
31
  * @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
31
32
  * @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
32
- * @param timeZone IANA timeZone identifier the boundary is computed in
33
+ * @param timeZone IANA name or UTC offset the boundary is computed in
33
34
  * @returns UTC instant string ending in "Z", or "" on invalid input
34
35
  *
35
36
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "America/New_York") // "2024-06-14T04:00:00Z" (the 14 June local midnight — the instant is already 14 June there)
@@ -52,7 +53,7 @@ export function floorToZone(value, unit, timeZone) {
52
53
  return "";
53
54
  }
54
55
  try {
55
- const zoned = Temporal.Instant.from(value).toZonedDateTimeISO(timeZone);
56
+ const zoned = instantFrom(value).toZonedDateTimeISO(timeZone);
56
57
  const start = zonedUnitStart(zoned, resolvedUnit);
57
58
  return start ? start.toInstant().toString() : "";
58
59
  }
@@ -16,11 +16,11 @@ import type { FiscalCalendar } from "../../types/index.js";
16
16
  * Saturday falling exactly on January 31. Passing a published year end from a 53-week year
17
17
  * instead (`"2024-02-03"`) states a different rule, because that date sits three days off
18
18
  * the target the rule is centred on, and yields a different, self-consistent calendar.
19
- * - `week` is the week of the fiscal year, 1–53, the numbering the NRF publishes. `period` is
20
- * 1–12. A 53rd week is appended to period 12 — the NRF adds it "to the end of the
21
- * calendar", which makes a 4-5-4 year's final quarter 4-5-5.
22
- * - **`year` is the calendar year the fiscal year starts in**, matching the NRF: fiscal 2023
23
- * runs 2023-01-29 to 2024-02-03. Organisations labelling by the end year should add one.
19
+ * - Weeks are numbered through the fiscal year as the NRF publishes them. A 53rd week is
20
+ * appended to period 12 — the NRF adds it "to the end of the calendar" — which makes a 4-5-4
21
+ * year's final quarter 4-5-5.
22
+ * - The `year` label follows the NRF: fiscal 2023 runs 2023-01-29 to 2024-02-03. Organisations
23
+ * labelling by the end year should add one.
24
24
  * - **`year` is not a unique key for a rule anchored near 1 January.** A 52/53-week year is
25
25
  * 364 or 371 days, so it drifts against the calendar, and no label taken from a calendar
26
26
  * year survives that for every anchor. Under `yearEndsOn: "2022-12-31"` — the Saturday
@@ -33,9 +33,10 @@ import type { FiscalCalendar } from "../../types/index.js";
33
33
  * date — which `yearEndsOn` determines, and which is yours to enumerate — not on `year`.
34
34
  * GMT does not invent a label the inputs do not fix.
35
35
  * - A `yearEndsOn` month-day that does not exist in a year follows Temporal's
36
- * `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A
37
- * "month-end" rule (26 CFR 1.441-2 style) would put a February 28 anchor on February 29 in
38
- * leap years; this does not — state such a rule with a date that exists every year.
36
+ * `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A rule tied
37
+ * to the end of a month (the weekday nearest to, or last in, the month's final days) would
38
+ * put a February 28 anchor on February 29 in leap years; this does not — state such a rule
39
+ * with a date that exists every year.
39
40
  * - Whether a fiscal year has 52 or 53 weeks is derived from the gap between its own two
40
41
  * ends, never assumed from a table.
41
42
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
@@ -58,7 +59,19 @@ import type { FiscalCalendar } from "../../types/index.js";
58
59
  * @example getFiscalPeriod("invalid", { pattern: "4-5-4", yearEndsOn: "2026-01-31" }) // null
59
60
  */
60
61
  export declare function getFiscalPeriod(value: string, calendar: FiscalCalendar): {
62
+ /**
63
+ * The calendar year the fiscal year starts in, not the year it ends in. Two consecutive fiscal
64
+ * years can share this label when `yearEndsOn` sits near 1 January.
65
+ */
61
66
  year: number;
67
+ /**
68
+ * The period of the fiscal year, 1 through 12. Each period is four or five weeks long as
69
+ * `calendar.pattern` sets, and a 53rd week belongs to period 12.
70
+ */
62
71
  period: number;
72
+ /**
73
+ * The week of the fiscal year, 1 through 52, or 53 in a year with an inserted week. Week 1 starts
74
+ * on the fiscal year's first day.
75
+ */
63
76
  week: number;
64
77
  } | null;
@@ -21,11 +21,11 @@ const DAYS_PER_WEEK = 7;
21
21
  * Saturday falling exactly on January 31. Passing a published year end from a 53-week year
22
22
  * instead (`"2024-02-03"`) states a different rule, because that date sits three days off
23
23
  * the target the rule is centred on, and yields a different, self-consistent calendar.
24
- * - `week` is the week of the fiscal year, 1–53, the numbering the NRF publishes. `period` is
25
- * 1–12. A 53rd week is appended to period 12 — the NRF adds it "to the end of the
26
- * calendar", which makes a 4-5-4 year's final quarter 4-5-5.
27
- * - **`year` is the calendar year the fiscal year starts in**, matching the NRF: fiscal 2023
28
- * runs 2023-01-29 to 2024-02-03. Organisations labelling by the end year should add one.
24
+ * - Weeks are numbered through the fiscal year as the NRF publishes them. A 53rd week is
25
+ * appended to period 12 — the NRF adds it "to the end of the calendar" — which makes a 4-5-4
26
+ * year's final quarter 4-5-5.
27
+ * - The `year` label follows the NRF: fiscal 2023 runs 2023-01-29 to 2024-02-03. Organisations
28
+ * labelling by the end year should add one.
29
29
  * - **`year` is not a unique key for a rule anchored near 1 January.** A 52/53-week year is
30
30
  * 364 or 371 days, so it drifts against the calendar, and no label taken from a calendar
31
31
  * year survives that for every anchor. Under `yearEndsOn: "2022-12-31"` — the Saturday
@@ -38,9 +38,10 @@ const DAYS_PER_WEEK = 7;
38
38
  * date — which `yearEndsOn` determines, and which is yours to enumerate — not on `year`.
39
39
  * GMT does not invent a label the inputs do not fix.
40
40
  * - A `yearEndsOn` month-day that does not exist in a year follows Temporal's
41
- * `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A
42
- * "month-end" rule (26 CFR 1.441-2 style) would put a February 28 anchor on February 29 in
43
- * leap years; this does not — state such a rule with a date that exists every year.
41
+ * `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A rule tied
42
+ * to the end of a month (the weekday nearest to, or last in, the month's final days) would
43
+ * put a February 28 anchor on February 29 in leap years; this does not — state such a rule
44
+ * with a date that exists every year.
44
45
  * - Whether a fiscal year has 52 or 53 weeks is derived from the gap between its own two
45
46
  * ends, never assumed from a table.
46
47
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
@@ -6,11 +6,7 @@
6
6
  * end of a year, so all three fields come back together rather than as three calls a caller
7
7
  * could combine inconsistently.
8
8
  *
9
- * - `year` is the ISO week-numbering year (`Temporal.PlainDate.yearOfWeek`), which differs
10
- * from the calendar year for late-December and early-January dates.
11
- * - `week` is 1–53. ISO week 1 is the week containing the year's first Thursday, so a
12
- * week-numbering year has 53 weeks roughly every five to six years.
13
- * - `weekday` is 1 (Monday) through 7 (Sunday).
9
+ * - A week-numbering year has 53 weeks roughly every five to six years, and 52 otherwise.
14
10
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. An
15
11
  * offset, a `Z` or a bracketed zone makes it a moment rather than a calendar date; convert
16
12
  * it in the zone you mean first (`convertUtcToZoned` then `convertZonedToPlainDateTime`),
@@ -29,7 +25,16 @@
29
25
  * @example getIsoWeekDate("invalid") // null
30
26
  */
31
27
  export declare function getIsoWeekDate(value: string): {
28
+ /**
29
+ * The ISO 8601 week-numbering year: the calendar year that holds the Thursday of the date's week.
30
+ * It differs from the date's own calendar year for some dates in late December and early January.
31
+ */
32
32
  year: number;
33
+ /**
34
+ * The ISO 8601 week number, 1 through 53. Week 1 is the week that holds the year's first
35
+ * Thursday, and weeks start on Monday.
36
+ */
33
37
  week: number;
38
+ /** The ISO 8601 day of the week, 1 (Monday) through 7 (Sunday). */
34
39
  weekday: number;
35
40
  } | null;
@@ -7,11 +7,7 @@ import { zonelessCalendarDate } from "../../internal/index.js";
7
7
  * end of a year, so all three fields come back together rather than as three calls a caller
8
8
  * could combine inconsistently.
9
9
  *
10
- * - `year` is the ISO week-numbering year (`Temporal.PlainDate.yearOfWeek`), which differs
11
- * from the calendar year for late-December and early-January dates.
12
- * - `week` is 1–53. ISO week 1 is the week containing the year's first Thursday, so a
13
- * week-numbering year has 53 weeks roughly every five to six years.
14
- * - `weekday` is 1 (Monday) through 7 (Sunday).
10
+ * - A week-numbering year has 53 weeks roughly every five to six years, and 52 otherwise.
15
11
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. An
16
12
  * offset, a `Z` or a bracketed zone makes it a moment rather than a calendar date; convert
17
13
  * it in the zone you mean first (`convertUtcToZoned` then `convertZonedToPlainDateTime`),
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Return the ISO 8601 ordinal date — calendar year and day of year — for `value`.
3
3
  *
4
- * - `dayOfYear` is 1–365, or 1–366 in a leap year.
5
- * - `year` is the calendar year, unlike `getIsoWeekDate`'s week-numbering year: an ordinal
6
- * date never disagrees with the calendar year it is written beside.
4
+ * - Unlike `getIsoWeekDate`, whose year is the week-numbering year, an ordinal date never
5
+ * disagrees with the calendar year it is written beside.
7
6
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
8
7
  * `getIsoWeekDate` for why a moment is not accepted here.
9
8
  * - Returns null on invalid input.
@@ -20,6 +19,14 @@
20
19
  * @example getOrdinalDate("invalid") // null
21
20
  */
22
21
  export declare function getOrdinalDate(value: string): {
22
+ /**
23
+ * The calendar year of the date. It is not the ISO 8601 week-numbering year, so it always matches
24
+ * the year written in `value`.
25
+ */
23
26
  year: number;
27
+ /**
28
+ * The 1-based day of that year, the ISO 8601 ordinal day: 1 is January 1, and December 31 is 365,
29
+ * or 366 in a leap year.
30
+ */
24
31
  dayOfYear: number;
25
32
  } | null;
@@ -2,9 +2,8 @@ import { zonelessCalendarDate } from "../../internal/index.js";
2
2
  /**
3
3
  * Return the ISO 8601 ordinal date — calendar year and day of year — for `value`.
4
4
  *
5
- * - `dayOfYear` is 1–365, or 1–366 in a leap year.
6
- * - `year` is the calendar year, unlike `getIsoWeekDate`'s week-numbering year: an ordinal
7
- * date never disagrees with the calendar year it is written beside.
5
+ * - Unlike `getIsoWeekDate`, whose year is the week-numbering year, an ordinal date never
6
+ * disagrees with the calendar year it is written beside.
8
7
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
9
8
  * `getIsoWeekDate` for why a moment is not accepted here.
10
9
  * - Returns null on invalid input.
@@ -1,22 +1,19 @@
1
1
  /**
2
2
  * Return the quarter `value` falls in, as a year and a quarter number.
3
3
  *
4
- * - `quarter` is 1–4. With no options these are the calendar quarters: Q1 is January to
5
- * March, and `year` is the calendar year.
6
- * - `fiscalYearStartMonth` (1–12, default 1) moves the year's first month. A date before it
7
- * belongs to the previous fiscal year, so `getQuarter("2024-03-31", { fiscalYearStartMonth:
8
- * 4 })` is Q4 of 2023.
9
- * - **`year` is the calendar year the fiscal year starts in**, matching the NRF retail
4
+ * - With no options these are the calendar quarters: Q1 is January to March, and `year` is
5
+ * the calendar year.
6
+ * - Labelling a fiscal year by the calendar year it starts in matches the NRF retail
10
7
  * convention `getFiscalPeriod` uses. Organisations that label a fiscal year by the calendar
11
- * year it *ends* in — the US federal government's October-start FY2025 begins in October
12
- * 2024 — should add one.
8
+ * year it *ends* in — for a fiscal year that starts in October, FY2025 begins in October
9
+ * 2024 — should add one to `year`.
13
10
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
14
11
  * `getIsoWeekDate` for why a moment is not accepted here.
15
12
  * - Returns null on invalid input, including a `fiscalYearStartMonth` that is not an integer
16
13
  * from 1 to 12.
17
14
  *
18
15
  * @param value zoneless ISO 8601 date or datetime string (e.g. "2024-06-15")
19
- * @param optionsArg optional: fiscalYearStartMonth (1-12, default 1)
16
+ * @param optionsArg The month the fiscal year starts in
20
17
  * @returns { year, quarter }, or null on invalid input
21
18
  *
22
19
  * @example getQuarter("2024-06-15") // { year: 2024, quarter: 2 }
@@ -29,8 +26,23 @@
29
26
  * @example getQuarter("invalid") // null
30
27
  */
31
28
  export declare function getQuarter(value: string, optionsArg?: {
29
+ /**
30
+ * The month the year starts in, 1 (January) through 12, which makes the quarters fiscal
31
+ * quarters. A date before it belongs to the previous fiscal year, so with `4` the date
32
+ * `"2024-03-31"` is Q4 of 2023.
33
+ *
34
+ * @defaultValue `1`
35
+ */
32
36
  fiscalYearStartMonth?: number;
33
37
  }): {
38
+ /**
39
+ * The year the quarter belongs to. With `fiscalYearStartMonth` set, it is the calendar year the
40
+ * fiscal year starts in, so a date before the start month reports the previous year.
41
+ */
34
42
  year: number;
43
+ /**
44
+ * The quarter of that year, 1 through 4. Quarter 1 begins in the `fiscalYearStartMonth` month,
45
+ * which is January by default.
46
+ */
35
47
  quarter: number;
36
48
  } | null;
@@ -1,5 +1,6 @@
1
1
  import { zonelessCalendarDate } from "../../internal/index.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
3
4
  /** Months in a quarter. */
4
5
  const MONTHS_PER_QUARTER = 3;
5
6
  /** Months in a year. */
@@ -7,22 +8,19 @@ const MONTHS_PER_YEAR = 12;
7
8
  /**
8
9
  * Return the quarter `value` falls in, as a year and a quarter number.
9
10
  *
10
- * - `quarter` is 1–4. With no options these are the calendar quarters: Q1 is January to
11
- * March, and `year` is the calendar year.
12
- * - `fiscalYearStartMonth` (1–12, default 1) moves the year's first month. A date before it
13
- * belongs to the previous fiscal year, so `getQuarter("2024-03-31", { fiscalYearStartMonth:
14
- * 4 })` is Q4 of 2023.
15
- * - **`year` is the calendar year the fiscal year starts in**, matching the NRF retail
11
+ * - With no options these are the calendar quarters: Q1 is January to March, and `year` is
12
+ * the calendar year.
13
+ * - Labelling a fiscal year by the calendar year it starts in matches the NRF retail
16
14
  * convention `getFiscalPeriod` uses. Organisations that label a fiscal year by the calendar
17
- * year it *ends* in — the US federal government's October-start FY2025 begins in October
18
- * 2024 — should add one.
15
+ * year it *ends* in — for a fiscal year that starts in October, FY2025 begins in October
16
+ * 2024 — should add one to `year`.
19
17
  * - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
20
18
  * `getIsoWeekDate` for why a moment is not accepted here.
21
19
  * - Returns null on invalid input, including a `fiscalYearStartMonth` that is not an integer
22
20
  * from 1 to 12.
23
21
  *
24
22
  * @param value zoneless ISO 8601 date or datetime string (e.g. "2024-06-15")
25
- * @param optionsArg optional: fiscalYearStartMonth (1-12, default 1)
23
+ * @param optionsArg The month the fiscal year starts in
26
24
  * @returns { year, quarter }, or null on invalid input
27
25
  *
28
26
  * @example getQuarter("2024-06-15") // { year: 2024, quarter: 2 }
@@ -39,9 +37,7 @@ export function getQuarter(value, optionsArg) {
39
37
  if (!isOptionsArgument(optionsArg)) {
40
38
  return null;
41
39
  }
42
- const fiscalYearStartMonth = optionsArg?.fiscalYearStartMonth === undefined
43
- ? 1
44
- : optionsArg.fiscalYearStartMonth;
40
+ const fiscalYearStartMonth = optionOrDefault(optionsArg?.fiscalYearStartMonth, 1);
45
41
  if (!Number.isInteger(fiscalYearStartMonth) ||
46
42
  fiscalYearStartMonth < 1 ||
47
43
  fiscalYearStartMonth > MONTHS_PER_YEAR) {
@@ -0,0 +1,53 @@
1
+ import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return the instant at which `duration` of open time has elapsed since `start`: the deadline
4
+ * of a service level measured in working hours.
5
+ *
6
+ * - The earliest instant `X` such that `operatingTimeBetween(start, X, schedule)` equals
7
+ * `duration`. The clock stops while the schedule is closed and resumes when it reopens, so an
8
+ * eight-hour SLA raised at Friday 16:00 on a 09:00–17:00 weekday desk falls due on Monday at
9
+ * 16:00. A deadline that lands exactly on a closing time is that closing instant, not the next
10
+ * opening.
11
+ * - `duration` is hours and smaller units (`"PT8H"`, `"PT90M"`). A duration with days, weeks,
12
+ * months or years returns `""`: `P1D` of open time could mean 24 open hours or one working
13
+ * day, and GMT does not guess. `"PT0S"` returns `start` itself, in UTC.
14
+ * - Returns `""` when the deadline would fall past the search horizon, rather than searching
15
+ * forever.
16
+ * - Holidays and overrides apply as in `operatingIntervals`.
17
+ * - Returns `""` on invalid input: an invalid instant, duration or `OperatingSchedule`, a
18
+ * negative `duration`, a `within` that is not a non-negative ISO duration, a `disambiguation`
19
+ * that is not one of the four values, and a search that would go more than 10,000 local dates past the input's date.
20
+ *
21
+ * @param start ISO 8601 instant string where the clock starts
22
+ * @param duration ISO 8601 duration of open time, hours and smaller units (e.g. "PT8H")
23
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
24
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
25
+ * @returns UTC instant string ending in "Z", or "" when past the horizon or on invalid input
26
+ *
27
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — Friday 16:00 to Monday 10:00 local
28
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT1H", { timeZone: "America/New_York", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-14T21:00:00Z" — due at closing, not at the next opening
29
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — past the horizon
30
+ * @example addOperatingTime("2024-06-15T12:00:00Z", "PT0S", { timeZone: "UTC", weekly: {} }) // "2024-06-15T12:00:00Z"
31
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "P1D", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "" — days are not open time
32
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "-PT1H", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // ""
33
+ */
34
+ export declare function addOperatingTime(start: string, duration: string, schedule: OperatingSchedule, optionsArg?: {
35
+ /**
36
+ * How far after `start` the search may go, as a non-negative ISO 8601 duration added in the
37
+ * schedule's zone, so `"P1D"` is one local day. A deadline exactly at that horizon counts, and a
38
+ * horizon past Temporal's last instant stops there.
39
+ *
40
+ * @defaultValue `"P1Y"`
41
+ */
42
+ within?: string;
43
+ /**
44
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
45
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
46
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
47
+ * both cases. `"reject"` returns `""` when a window with such an edge could add open time
48
+ * before the deadline.
49
+ *
50
+ * @defaultValue `"compatible"`, Temporal's default.
51
+ */
52
+ disambiguation?: Disambiguation;
53
+ }): string;
@@ -0,0 +1,59 @@
1
+ import { parseInstantNanoseconds } from "../../internal/index.js";
2
+ import { instantAfterOpenTime, instantText, parseOpenTimeAmount, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return the instant at which `duration` of open time has elapsed since `start`: the deadline
5
+ * of a service level measured in working hours.
6
+ *
7
+ * - The earliest instant `X` such that `operatingTimeBetween(start, X, schedule)` equals
8
+ * `duration`. The clock stops while the schedule is closed and resumes when it reopens, so an
9
+ * eight-hour SLA raised at Friday 16:00 on a 09:00–17:00 weekday desk falls due on Monday at
10
+ * 16:00. A deadline that lands exactly on a closing time is that closing instant, not the next
11
+ * opening.
12
+ * - `duration` is hours and smaller units (`"PT8H"`, `"PT90M"`). A duration with days, weeks,
13
+ * months or years returns `""`: `P1D` of open time could mean 24 open hours or one working
14
+ * day, and GMT does not guess. `"PT0S"` returns `start` itself, in UTC.
15
+ * - Returns `""` when the deadline would fall past the search horizon, rather than searching
16
+ * forever.
17
+ * - Holidays and overrides apply as in `operatingIntervals`.
18
+ * - Returns `""` on invalid input: an invalid instant, duration or `OperatingSchedule`, a
19
+ * negative `duration`, a `within` that is not a non-negative ISO duration, a `disambiguation`
20
+ * that is not one of the four values, and a search that would go more than 10,000 local dates past the input's date.
21
+ *
22
+ * @param start ISO 8601 instant string where the clock starts
23
+ * @param duration ISO 8601 duration of open time, hours and smaller units (e.g. "PT8H")
24
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
25
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
26
+ * @returns UTC instant string ending in "Z", or "" when past the horizon or on invalid input
27
+ *
28
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — Friday 16:00 to Monday 10:00 local
29
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT1H", { timeZone: "America/New_York", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-14T21:00:00Z" — due at closing, not at the next opening
30
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — past the horizon
31
+ * @example addOperatingTime("2024-06-15T12:00:00Z", "PT0S", { timeZone: "UTC", weekly: {} }) // "2024-06-15T12:00:00Z"
32
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "P1D", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "" — days are not open time
33
+ * @example addOperatingTime("2024-06-14T20:00:00Z", "-PT1H", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // ""
34
+ */
35
+ export function addOperatingTime(start, duration, schedule, optionsArg) {
36
+ try {
37
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
38
+ const resolved = parseOperatingSchedule(schedule);
39
+ const from = parseInstantNanoseconds(start);
40
+ const amount = parseOpenTimeAmount(duration);
41
+ if (disambiguation === null ||
42
+ resolved === null ||
43
+ from === null ||
44
+ amount === null) {
45
+ return "";
46
+ }
47
+ const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
48
+ if (horizon === null) {
49
+ return "";
50
+ }
51
+ const answer = instantAfterOpenTime(resolved, from, amount, horizon, disambiguation);
52
+ return typeof answer === "bigint" ? instantText(answer) : "";
53
+ }
54
+ catch {
55
+ // Never throws (Core Rule 3): a hostile
56
+ // argument is invalid input, not an exception.
57
+ return "";
58
+ }
59
+ }
@@ -0,0 +1,7 @@
1
+ export * from "./addOperatingTime.js";
2
+ export * from "./isOpenAt.js";
3
+ export * from "./nextCloseAt.js";
4
+ export * from "./nextOpenAt.js";
5
+ export * from "./operatingIntervals.js";
6
+ export * from "./operatingTimeBetween.js";
7
+ export * from "./recurringWindows.js";
@@ -0,0 +1,7 @@
1
+ export * from "./addOperatingTime.js";
2
+ export * from "./isOpenAt.js";
3
+ export * from "./nextCloseAt.js";
4
+ export * from "./nextOpenAt.js";
5
+ export * from "./operatingIntervals.js";
6
+ export * from "./operatingTimeBetween.js";
7
+ export * from "./recurringWindows.js";
@@ -0,0 +1,39 @@
1
+ import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return true when `schedule` is open at the instant `isoString`.
4
+ *
5
+ * - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
6
+ * instant is open, a closing instant is closed. Where one window ends as the next begins, the
7
+ * schedule stays open.
8
+ * - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
9
+ * on Saturday even when Saturday is a holiday.
10
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
11
+ * never supplies the zone — the schedule's own zone reads the windows. Only its instant is
12
+ * read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
13
+ * - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
14
+ * `disambiguation` that is not one of the four values. Check the schedule with
15
+ * `operatingIntervals` when "closed" and "invalid" must be told apart.
16
+ *
17
+ * @param isoString ISO 8601 instant string to test
18
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
19
+ * @param optionsArg How a window edge on a clock change is resolved
20
+ * @returns true when open at that instant, or false when closed or on invalid input
21
+ *
22
+ * @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
23
+ * @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
24
+ * @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
25
+ * @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
26
+ * @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
27
+ */
28
+ export declare function isOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
29
+ /**
30
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
31
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
32
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
33
+ * both cases. `"reject"` returns `false` when a window with such an edge is the only one that
34
+ * could be open at `isoString`.
35
+ *
36
+ * @defaultValue `"compatible"`, Temporal's default.
37
+ */
38
+ disambiguation?: Disambiguation;
39
+ }): boolean;
@@ -0,0 +1,44 @@
1
+ import { parseInstantNanoseconds } from "../../internal/index.js";
2
+ import { firstOpenInstant, parseOperatingSchedule, parseScheduleDisambiguation, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return true when `schedule` is open at the instant `isoString`.
5
+ *
6
+ * - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
7
+ * instant is open, a closing instant is closed. Where one window ends as the next begins, the
8
+ * schedule stays open.
9
+ * - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
10
+ * on Saturday even when Saturday is a holiday.
11
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
12
+ * never supplies the zone — the schedule's own zone reads the windows. Only its instant is
13
+ * read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
14
+ * - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
15
+ * `disambiguation` that is not one of the four values. Check the schedule with
16
+ * `operatingIntervals` when "closed" and "invalid" must be told apart.
17
+ *
18
+ * @param isoString ISO 8601 instant string to test
19
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
20
+ * @param optionsArg How a window edge on a clock change is resolved
21
+ * @returns true when open at that instant, or false when closed or on invalid input
22
+ *
23
+ * @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
24
+ * @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
25
+ * @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
26
+ * @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
27
+ * @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
28
+ */
29
+ export function isOpenAt(isoString, schedule, optionsArg) {
30
+ try {
31
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
32
+ const resolved = parseOperatingSchedule(schedule);
33
+ const at = parseInstantNanoseconds(isoString);
34
+ if (disambiguation === null || resolved === null || at === null) {
35
+ return false;
36
+ }
37
+ return firstOpenInstant(resolved, at, at, disambiguation) === at;
38
+ }
39
+ catch {
40
+ // Never throws (Core Rule 3): a hostile
41
+ // argument is invalid input, not an exception.
42
+ return false;
43
+ }
44
+ }