@northguild/gmt 1.18.0 → 1.20.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 (1283) hide show
  1. package/README.md +55 -2920
  2. package/dist/calendar/business/businessDaysBetween.d.ts +2 -2
  3. package/dist/calendar/business/businessDaysBetween.js +11 -35
  4. package/dist/calendar/business/mergeCalendars.d.ts +1 -1
  5. package/dist/calendar/business/mergeCalendars.js +8 -9
  6. package/dist/calendar/business/nextBusinessDay.d.ts +2 -2
  7. package/dist/calendar/business/nextBusinessDay.js +2 -2
  8. package/dist/calendar/business/previousBusinessDay.d.ts +2 -2
  9. package/dist/calendar/business/previousBusinessDay.js +2 -2
  10. package/dist/calendar/business/rollDate.d.ts +3 -3
  11. package/dist/calendar/business/rollDate.js +10 -43
  12. package/dist/calendar/calculate/bucketRange.d.ts +19 -11
  13. package/dist/calendar/calculate/bucketRange.js +27 -70
  14. package/dist/calendar/calculate/floorToZone.d.ts +12 -4
  15. package/dist/calendar/calculate/floorToZone.js +16 -8
  16. package/dist/calendar/calculate/getFiscalPeriod.d.ts +50 -40
  17. package/dist/calendar/calculate/getFiscalPeriod.js +78 -57
  18. package/dist/calendar/calculate/getQuarter.d.ts +26 -21
  19. package/dist/calendar/calculate/getQuarter.js +48 -19
  20. package/dist/calendar/hours/addOperatingTime.d.ts +9 -3
  21. package/dist/calendar/hours/addOperatingTime.js +10 -4
  22. package/dist/calendar/hours/isOpenAt.d.ts +9 -3
  23. package/dist/calendar/hours/isOpenAt.js +9 -3
  24. package/dist/calendar/hours/nextCloseAt.d.ts +8 -2
  25. package/dist/calendar/hours/nextCloseAt.js +9 -3
  26. package/dist/calendar/hours/nextOpenAt.d.ts +9 -3
  27. package/dist/calendar/hours/nextOpenAt.js +10 -4
  28. package/dist/calendar/hours/operatingIntervals.d.ts +7 -2
  29. package/dist/calendar/hours/operatingIntervals.js +9 -6
  30. package/dist/calendar/hours/operatingTimeBetween.d.ts +8 -3
  31. package/dist/calendar/hours/operatingTimeBetween.js +11 -8
  32. package/dist/calendar/hours/recurringWindows.d.ts +13 -6
  33. package/dist/calendar/hours/recurringWindows.js +21 -14
  34. package/dist/calendar/index.d.ts +1 -1
  35. package/dist/calendar/index.js +2 -2
  36. package/dist/calendar/validate/index.d.ts +3 -0
  37. package/dist/calendar/validate/index.js +3 -0
  38. package/dist/calendar/validate/isValidFiscalCalendar.d.ts +23 -0
  39. package/dist/calendar/validate/isValidFiscalCalendar.js +44 -0
  40. package/dist/calendar/validate/isValidFiscalExtraWeek.d.ts +19 -0
  41. package/dist/calendar/validate/isValidFiscalExtraWeek.js +23 -0
  42. package/dist/calendar/validate/isValidFiscalPattern.d.ts +7 -7
  43. package/dist/calendar/validate/isValidFiscalPattern.js +7 -7
  44. package/dist/calendar/validate/isValidFiscalYearLabel.d.ts +20 -0
  45. package/dist/calendar/validate/isValidFiscalYearLabel.js +24 -0
  46. package/dist/calendar/validate/isValidRollConvention.js +2 -10
  47. package/dist/calendar/validate/isValidZoneBucketUnit.d.ts +1 -1
  48. package/dist/duration/calculate/absDuration.js +1 -1
  49. package/dist/duration/calculate/addDuration.js +1 -1
  50. package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
  51. package/dist/duration/calculate/durationFromUnits.js +67 -0
  52. package/dist/duration/calculate/getDurationSign.js +1 -1
  53. package/dist/duration/calculate/getDurationUnit.d.ts +3 -3
  54. package/dist/duration/calculate/getDurationUnit.js +3 -3
  55. package/dist/duration/calculate/index.d.ts +3 -1
  56. package/dist/duration/calculate/index.js +3 -1
  57. package/dist/duration/calculate/negateDuration.d.ts +1 -1
  58. package/dist/duration/calculate/negateDuration.js +2 -2
  59. package/dist/duration/calculate/subtractDuration.js +1 -1
  60. package/dist/duration/calculate/{durationAs.d.ts → totalDuration.d.ts} +27 -21
  61. package/dist/duration/calculate/{durationAs.js → totalDuration.js} +27 -21
  62. package/dist/duration/calculate/totalUnits.d.ts +49 -0
  63. package/dist/duration/calculate/totalUnits.js +73 -0
  64. package/dist/duration/compare/compareDurations.d.ts +4 -4
  65. package/dist/duration/compare/compareDurations.js +4 -4
  66. package/dist/duration/format/formatDuration.d.ts +9 -9
  67. package/dist/duration/format/formatDuration.js +14 -13
  68. package/dist/duration/index.d.ts +1 -1
  69. package/dist/duration/index.js +2 -2
  70. package/dist/duration/normalize/normalizeDuration.d.ts +3 -3
  71. package/dist/duration/normalize/normalizeDuration.js +3 -3
  72. package/dist/duration/parse/parseDuration.d.ts +1 -1
  73. package/dist/duration/parse/parseDuration.js +1 -1
  74. package/dist/duration/validate/isValidDuration.js +2 -11
  75. package/dist/gnss/convert/gnssToUtc.d.ts +24 -0
  76. package/dist/gnss/convert/gnssToUtc.js +39 -0
  77. package/dist/gnss/convert/gnssWeekToUtc.d.ts +53 -0
  78. package/dist/gnss/convert/gnssWeekToUtc.js +80 -0
  79. package/dist/gnss/convert/index.d.ts +6 -0
  80. package/dist/gnss/convert/index.js +6 -0
  81. package/dist/gnss/convert/rinexWeekToUtc.d.ts +34 -0
  82. package/dist/gnss/convert/rinexWeekToUtc.js +57 -0
  83. package/dist/gnss/convert/utcToGnss.d.ts +38 -0
  84. package/dist/gnss/convert/utcToGnss.js +53 -0
  85. package/dist/gnss/convert/utcToGnssWeek.d.ts +24 -0
  86. package/dist/gnss/convert/utcToGnssWeek.js +40 -0
  87. package/dist/gnss/convert/utcToRinexWeek.d.ts +19 -0
  88. package/dist/gnss/convert/utcToRinexWeek.js +45 -0
  89. package/dist/gnss/index.d.ts +2 -0
  90. package/dist/gnss/index.js +3 -0
  91. package/dist/index.d.ts +4 -1
  92. package/dist/index.js +4 -1
  93. package/dist/instant/convert/classifyLocal.d.ts +9 -5
  94. package/dist/instant/convert/classifyLocal.js +19 -20
  95. package/dist/instant/convert/fromOffsetInstant.d.ts +8 -4
  96. package/dist/instant/convert/fromOffsetInstant.js +11 -6
  97. package/dist/instant/convert/resolveLocal.d.ts +16 -11
  98. package/dist/instant/convert/resolveLocal.js +25 -17
  99. package/dist/instant/convert/toOffsetInstant.d.ts +23 -19
  100. package/dist/instant/convert/toOffsetInstant.js +29 -38
  101. package/dist/instant/index.d.ts +2 -1
  102. package/dist/instant/index.js +3 -2
  103. package/dist/instant/validate/index.d.ts +1 -0
  104. package/dist/instant/validate/index.js +1 -0
  105. package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
  106. package/dist/instant/validate/isValidUtcOffset.js +35 -0
  107. package/dist/intermodal/calculate/billingTimeline.js +1 -1
  108. package/dist/intermodal/calculate/chargeableDays.d.ts +18 -12
  109. package/dist/intermodal/calculate/chargeableDays.js +27 -18
  110. package/dist/intermodal/calculate/demurrageClock.d.ts +1 -1
  111. package/dist/intermodal/calculate/demurrageClock.js +2 -2
  112. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +17 -10
  113. package/dist/intermodal/calculate/freeTimeExpiry.js +32 -17
  114. package/dist/intermodal/calculate/index.d.ts +1 -0
  115. package/dist/intermodal/calculate/index.js +1 -0
  116. package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
  117. package/dist/intermodal/calculate/multimodalETA.js +145 -0
  118. package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
  119. package/dist/intermodal/format/bolTimestamp.js +78 -0
  120. package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
  121. package/dist/intermodal/format/formatEdifactDate.js +42 -0
  122. package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
  123. package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
  124. package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
  125. package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
  126. package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
  127. package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
  128. package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
  129. package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
  130. package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
  131. package/dist/intermodal/format/formatEdifactTime.js +43 -0
  132. package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
  133. package/dist/intermodal/format/formatEpcisEvent.js +79 -0
  134. package/dist/intermodal/format/formatX12Date.d.ts +35 -0
  135. package/dist/intermodal/format/formatX12Date.js +43 -0
  136. package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
  137. package/dist/intermodal/format/formatX12DateRange.js +45 -0
  138. package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
  139. package/dist/intermodal/format/formatX12DateTime.js +47 -0
  140. package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
  141. package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
  142. package/dist/intermodal/format/formatX12Time.d.ts +42 -0
  143. package/dist/intermodal/format/formatX12Time.js +50 -0
  144. package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
  145. package/dist/intermodal/format/formatX12TimeElement.js +54 -0
  146. package/dist/intermodal/format/index.d.ts +14 -0
  147. package/dist/intermodal/format/index.js +14 -0
  148. package/dist/intermodal/index.d.ts +4 -1
  149. package/dist/intermodal/index.js +5 -2
  150. package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
  151. package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
  152. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
  153. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
  154. package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
  155. package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
  156. package/dist/intermodal/parse/index.d.ts +18 -0
  157. package/dist/intermodal/parse/index.js +18 -0
  158. package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
  159. package/dist/intermodal/parse/parseEdifactDate.js +45 -0
  160. package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
  161. package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
  162. package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
  163. package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
  164. package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
  165. package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
  166. package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
  167. package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
  168. package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
  169. package/dist/intermodal/parse/parseEdifactTime.js +45 -0
  170. package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
  171. package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
  172. package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
  173. package/dist/intermodal/parse/parseX12Date.js +47 -0
  174. package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
  175. package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
  176. package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
  177. package/dist/intermodal/parse/parseX12DateRange.js +52 -0
  178. package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
  179. package/dist/intermodal/parse/parseX12DateTime.js +53 -0
  180. package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
  181. package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
  182. package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
  183. package/dist/intermodal/parse/parseX12Time.js +77 -0
  184. package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
  185. package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
  186. package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
  187. package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
  188. package/dist/intermodal/validate/index.d.ts +18 -0
  189. package/dist/intermodal/validate/index.js +18 -0
  190. package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
  191. package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
  192. package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
  193. package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
  194. package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
  195. package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
  196. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
  197. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
  198. package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
  199. package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
  200. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
  201. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
  202. package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
  203. package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
  204. package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
  205. package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
  206. package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
  207. package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
  208. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
  209. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
  210. package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
  211. package/dist/intermodal/validate/isValidX12Date.js +30 -0
  212. package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
  213. package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
  214. package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
  215. package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
  216. package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
  217. package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
  218. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
  219. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
  220. package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
  221. package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
  222. package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
  223. package/dist/intermodal/validate/isValidX12Time.js +40 -0
  224. package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
  225. package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
  226. package/dist/internal/advanceToWeekday.d.ts +1 -1
  227. package/dist/internal/businessCalendar.d.ts +28 -12
  228. package/dist/internal/businessCalendar.js +131 -125
  229. package/dist/internal/businessDayValues.js +1 -1
  230. package/dist/internal/calendarDatePairPolicy.d.ts +1 -1
  231. package/dist/internal/calendarDateString.d.ts +1 -1
  232. package/dist/internal/calendarDateString.js +1 -1
  233. package/dist/internal/calendarSystemIds.js +1 -1
  234. package/dist/internal/calendarValueOfDate.js +1 -1
  235. package/dist/internal/calendarZonedPairPolicy.d.ts +1 -1
  236. package/dist/internal/calendarZonedString.d.ts +3 -3
  237. package/dist/internal/calendarZonedString.js +4 -4
  238. package/dist/internal/compareUnixEpochs.js +1 -1
  239. package/dist/internal/cutoffAtResolved.d.ts +62 -0
  240. package/dist/internal/cutoffAtResolved.js +162 -0
  241. package/dist/internal/cycleFieldValue.d.ts +0 -2
  242. package/dist/internal/cycleFieldValue.js +0 -2
  243. package/dist/internal/dateTimeUnitHelpers.d.ts +1 -1
  244. package/dist/internal/dateUnitHelpers.d.ts +1 -1
  245. package/dist/internal/daylightTime.d.ts +1 -1
  246. package/dist/internal/differenceRecord.d.ts +1 -1
  247. package/dist/internal/durationUntilString.d.ts +1 -1
  248. package/dist/internal/durationUntilString.js +1 -1
  249. package/dist/internal/dutyEngine.d.ts +125 -0
  250. package/dist/internal/dutyEngine.js +1755 -0
  251. package/dist/internal/dutyLog.d.ts +27 -0
  252. package/dist/internal/dutyLog.js +47 -0
  253. package/dist/internal/dutyPeriods.d.ts +135 -0
  254. package/dist/internal/dutyPeriods.js +375 -0
  255. package/dist/internal/dutyRules.d.ts +198 -0
  256. package/dist/internal/dutyRules.js +484 -0
  257. package/dist/internal/dutyRunIndex.d.ts +150 -0
  258. package/dist/internal/dutyRunIndex.js +398 -0
  259. package/dist/internal/earlierOccurrence.d.ts +41 -0
  260. package/dist/internal/earlierOccurrence.js +57 -0
  261. package/dist/internal/ediDateTimeFields.d.ts +97 -0
  262. package/dist/internal/ediDateTimeFields.js +288 -0
  263. package/dist/internal/ediDateTimeWriter.d.ts +92 -0
  264. package/dist/internal/ediDateTimeWriter.js +298 -0
  265. package/dist/internal/ediGrammar.d.ts +158 -0
  266. package/dist/internal/ediGrammar.js +384 -0
  267. package/dist/internal/englishCalendarNames.d.ts +4 -2
  268. package/dist/internal/englishCalendarNames.js +3 -1
  269. package/dist/internal/epochDay.d.ts +41 -0
  270. package/dist/internal/epochDay.js +129 -0
  271. package/dist/internal/exactDuration.js +1 -1
  272. package/dist/internal/exactMoment.d.ts +4 -4
  273. package/dist/internal/exactMoment.js +5 -5
  274. package/dist/internal/fiscalCalendar.d.ts +41 -7
  275. package/dist/internal/fiscalCalendar.js +77 -9
  276. package/dist/internal/foreignEpochs.d.ts +5 -0
  277. package/dist/internal/foreignEpochs.js +5 -0
  278. package/dist/internal/formatCalendarDays.d.ts +4 -4
  279. package/dist/internal/formatCalendarDays.js +6 -5
  280. package/dist/internal/formatDateInCalendar.d.ts +1 -1
  281. package/dist/internal/formatRelativeDuration.d.ts +7 -7
  282. package/dist/internal/formatRelativeDuration.js +8 -7
  283. package/dist/internal/formatterCache.d.ts +40 -0
  284. package/dist/internal/formatterCache.js +181 -0
  285. package/dist/internal/freeTimeLedger.d.ts +35 -42
  286. package/dist/internal/freeTimeLedger.js +332 -31
  287. package/dist/internal/getLocaleWeekYearBounds.d.ts +1 -1
  288. package/dist/internal/gnssTimeScales.d.ts +53 -0
  289. package/dist/internal/gnssTimeScales.js +128 -0
  290. package/dist/internal/gnssWeek.d.ts +92 -0
  291. package/dist/internal/gnssWeek.js +212 -0
  292. package/dist/internal/halfOpenIntervals.d.ts +1 -1
  293. package/dist/internal/halfOpenIntervals.js +1 -1
  294. package/dist/internal/hasCalendarAnnotation.d.ts +3 -3
  295. package/dist/internal/hasCalendarAnnotation.js +3 -3
  296. package/dist/internal/hourDurationString.js +1 -1
  297. package/dist/internal/httpDateFields.js +1 -1
  298. package/dist/internal/index.d.ts +14 -5
  299. package/dist/internal/index.js +18 -5
  300. package/dist/internal/inputChecks.d.ts +53 -0
  301. package/dist/internal/inputChecks.js +132 -0
  302. package/dist/internal/instantFormatOptions.d.ts +1 -1
  303. package/dist/internal/instantFormatOptions.js +4 -8
  304. package/dist/internal/instantIntervalText.js +1 -1
  305. package/dist/internal/instantNanoseconds.d.ts +2 -2
  306. package/dist/internal/instantNanoseconds.js +2 -2
  307. package/dist/internal/intervalCountHelpers.d.ts +1 -1
  308. package/dist/internal/intervalNanoseconds.js +2 -1
  309. package/dist/internal/isObject.d.ts +13 -6
  310. package/dist/internal/isObject.js +14 -7
  311. package/dist/internal/isoStringBody.d.ts +2 -2
  312. package/dist/internal/isoStringBody.js +2 -2
  313. package/dist/internal/isoYearString.d.ts +21 -0
  314. package/dist/internal/isoYearString.js +27 -0
  315. package/dist/internal/joinDateTimeConnector.js +3 -2
  316. package/dist/internal/leapSeconds.d.ts +63 -0
  317. package/dist/internal/leapSeconds.js +162 -0
  318. package/dist/internal/localeWeekInfo.d.ts +1 -1
  319. package/dist/internal/localeWeekInfo.js +1 -1
  320. package/dist/internal/maxPieces.js +2 -1
  321. package/dist/internal/monthGridWeekRow.d.ts +1 -1
  322. package/dist/internal/normalizeDateTime.d.ts +2 -1
  323. package/dist/internal/normalizeDateTime.js +3 -2
  324. package/dist/internal/normalizeTimeZone.d.ts +5 -2
  325. package/dist/internal/normalizeTimeZone.js +5 -2
  326. package/dist/internal/offsetTimeline.d.ts +56 -0
  327. package/dist/internal/offsetTimeline.js +166 -0
  328. package/dist/internal/operatingSchedule.d.ts +39 -34
  329. package/dist/internal/operatingSchedule.js +672 -222
  330. package/dist/internal/patternToken.d.ts +10 -3
  331. package/dist/internal/patternToken.js +41 -19
  332. package/dist/internal/plainDateAdd.d.ts +1 -1
  333. package/dist/internal/plainDateAdd.js +1 -1
  334. package/dist/internal/plainDateUntil.d.ts +1 -1
  335. package/dist/internal/plainDateUntil.js +1 -1
  336. package/dist/internal/readDurationUnits.d.ts +34 -0
  337. package/dist/internal/readDurationUnits.js +78 -0
  338. package/dist/internal/readSetFields.d.ts +50 -0
  339. package/dist/internal/readSetFields.js +179 -0
  340. package/dist/internal/resolveDurationRelativeTo.d.ts +1 -1
  341. package/dist/internal/resolveDurationRelativeTo.js +1 -1
  342. package/dist/internal/resolveLocale.d.ts +2 -2
  343. package/dist/internal/resolveLocale.js +2 -2
  344. package/dist/internal/resolveManualRoundingOptions.d.ts +1 -1
  345. package/dist/internal/resolveRelativeUnit.d.ts +1 -1
  346. package/dist/internal/resolveRelativeUnit.js +1 -1
  347. package/dist/internal/resolveUnixIntervalPair.d.ts +9 -3
  348. package/dist/internal/resolveUnixIntervalPair.js +11 -7
  349. package/dist/internal/rinexWeek.d.ts +22 -0
  350. package/dist/internal/rinexWeek.js +30 -0
  351. package/dist/internal/rollBusinessDate.d.ts +15 -0
  352. package/dist/internal/rollBusinessDate.js +46 -0
  353. package/dist/internal/splitStep.d.ts +1 -1
  354. package/dist/internal/splitStep.js +1 -1
  355. package/dist/internal/startOrEndOfUnix.d.ts +3 -2
  356. package/dist/internal/startOrEndOfUnix.js +9 -6
  357. package/dist/internal/startOrEndOfUtc.d.ts +1 -1
  358. package/dist/internal/startOrEndOfUtc.js +1 -1
  359. package/dist/internal/startOrEndOfZoned.d.ts +1 -1
  360. package/dist/internal/temporal.d.ts +5 -0
  361. package/dist/internal/temporal.js +5 -0
  362. package/dist/internal/temporalCompat/calendarDateArithmetic.d.ts +1 -1
  363. package/dist/internal/temporalCompat/calendarDateFromFields.d.ts +1 -1
  364. package/dist/internal/temporalCompat/calendarDateFromFields.js +1 -1
  365. package/dist/internal/temporalCompat/calendarFields.d.ts +1 -1
  366. package/dist/internal/temporalCompat/capabilities.d.ts +27 -5
  367. package/dist/internal/temporalCompat/capabilities.js +28 -4
  368. package/dist/internal/temporalCompat/fieldSearch.d.ts +1 -1
  369. package/dist/internal/temporalCompat/fieldSearch.js +1 -1
  370. package/dist/internal/temporalCompat/fixedDay.d.ts +1 -1
  371. package/dist/internal/temporalCompat/fixedDay.js +1 -1
  372. package/dist/internal/temporalCompat/index.d.ts +1 -1
  373. package/dist/internal/temporalCompat/index.js +1 -1
  374. package/dist/internal/temporalCompat/largeMonthSpan.js +1 -1
  375. package/dist/internal/temporalCompat/nonIsoArithmetic.d.ts +1 -1
  376. package/dist/internal/temporalCompat/nonIsoArithmetic.js +1 -1
  377. package/dist/internal/temporalCompat/probeRepros.d.ts +35 -0
  378. package/dist/internal/temporalCompat/probeRepros.js +571 -0
  379. package/dist/internal/temporalCompat/readArithmeticModel.js +2 -2
  380. package/dist/internal/temporalCompat/repros.d.ts +3 -10
  381. package/dist/internal/temporalCompat/repros.js +13 -520
  382. package/dist/internal/timeScaleString.d.ts +47 -0
  383. package/dist/internal/timeScaleString.js +86 -0
  384. package/dist/internal/toInstantFromUtc.d.ts +1 -1
  385. package/dist/internal/toInstantFromUtc.js +1 -1
  386. package/dist/internal/twoDigitYear.d.ts +19 -0
  387. package/dist/internal/twoDigitYear.js +22 -0
  388. package/dist/internal/unixEpochValue.d.ts +1 -1
  389. package/dist/internal/unixEpochValue.js +4 -3
  390. package/dist/internal/unixFormatReference.d.ts +1 -1
  391. package/dist/internal/unixFormatReference.js +1 -1
  392. package/dist/internal/unixWallClock.d.ts +24 -0
  393. package/dist/internal/unixWallClock.js +35 -0
  394. package/dist/internal/utcOffsetString.d.ts +16 -0
  395. package/dist/internal/utcOffsetString.js +31 -1
  396. package/dist/internal/utcReading.d.ts +59 -0
  397. package/dist/internal/utcReading.js +113 -0
  398. package/dist/internal/utcWallClock.d.ts +20 -0
  399. package/dist/internal/utcWallClock.js +32 -0
  400. package/dist/internal/validatedZones.d.ts +20 -0
  401. package/dist/internal/validatedZones.js +33 -0
  402. package/dist/internal/wallClockAtOffset.d.ts +1 -1
  403. package/dist/internal/yearWindowStart.d.ts +28 -0
  404. package/dist/internal/yearWindowStart.js +52 -0
  405. package/dist/internal/zoneBucketCap.d.ts +18 -0
  406. package/dist/internal/zoneBucketCap.js +64 -0
  407. package/dist/internal/zoneFrame.d.ts +180 -0
  408. package/dist/internal/zoneFrame.js +221 -0
  409. package/dist/internal/zonedBucket.d.ts +2 -2
  410. package/dist/internal/zonedBucket.js +92 -21
  411. package/dist/internal/zonedFormatReference.d.ts +1 -1
  412. package/dist/internal/zonedFormatReference.js +1 -1
  413. package/dist/internal/zonedLocalDates.d.ts +1 -1
  414. package/dist/internal/zonedLocalDates.js +22 -19
  415. package/dist/internal/zonedNowUnitValue.d.ts +8 -5
  416. package/dist/internal/zonedNowUnitValue.js +9 -5
  417. package/dist/internal/zonedTransitionSearch.d.ts +2 -0
  418. package/dist/internal/zonedTransitionSearch.js +165 -16
  419. package/dist/internal/zonedWallClock.d.ts +15 -4
  420. package/dist/internal/zonedWallClock.js +34 -6
  421. package/dist/internal/zonedWallClockDifference.d.ts +1 -1
  422. package/dist/internal/zonedWallClockDifference.js +6 -6
  423. package/dist/internal/zonedWallClockOperations.d.ts +7 -4
  424. package/dist/internal/zonedWallClockOperations.js +58 -16
  425. package/dist/internal/zonelessCalendarDate.d.ts +1 -1
  426. package/dist/internal/zonelessCalendarDate.js +1 -1
  427. package/dist/interval/index.d.ts +1 -1
  428. package/dist/interval/index.js +2 -2
  429. package/dist/plain/calculate/addBusinessDays.d.ts +2 -2
  430. package/dist/plain/calculate/addBusinessDays.js +2 -2
  431. package/dist/plain/calculate/addDate.js +4 -7
  432. package/dist/plain/calculate/addDateTime.js +5 -8
  433. package/dist/plain/calculate/addTime.js +5 -8
  434. package/dist/plain/calculate/clampDate.js +1 -1
  435. package/dist/plain/calculate/closestDateTo.js +1 -1
  436. package/dist/plain/calculate/cycleDate.js +1 -1
  437. package/dist/plain/calculate/cycleDateTime.js +1 -1
  438. package/dist/plain/calculate/cycleTime.js +1 -1
  439. package/dist/plain/calculate/diffDate.d.ts +1 -1
  440. package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
  441. package/dist/plain/calculate/diffDateTime.d.ts +1 -1
  442. package/dist/plain/calculate/diffDateTime.js +1 -1
  443. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
  444. package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
  445. package/dist/plain/calculate/diffTime.d.ts +1 -1
  446. package/dist/plain/calculate/diffTime.js +1 -1
  447. package/dist/plain/calculate/endOfDate.d.ts +1 -1
  448. package/dist/plain/calculate/endOfDate.js +1 -1
  449. package/dist/plain/calculate/endOfDateTime.d.ts +1 -1
  450. package/dist/plain/calculate/endOfDateTime.js +1 -1
  451. package/dist/plain/calculate/endOfQuarterForDate.js +1 -1
  452. package/dist/plain/calculate/endOfQuarterForDateTime.js +1 -1
  453. package/dist/plain/calculate/endOfTime.d.ts +2 -2
  454. package/dist/plain/calculate/endOfTime.js +1 -1
  455. package/dist/plain/calculate/getDayOfYear.js +1 -1
  456. package/dist/plain/calculate/getDaysInMonth.js +1 -1
  457. package/dist/plain/calculate/getDaysInYear.js +1 -1
  458. package/dist/plain/calculate/getLargestDateDurationUnit.d.ts +1 -1
  459. package/dist/plain/calculate/getLargestDateTimeDurationUnit.d.ts +1 -1
  460. package/dist/plain/calculate/getLargestTimeDurationUnit.d.ts +1 -1
  461. package/dist/plain/calculate/getLocaleDayOfWeek.d.ts +6 -6
  462. package/dist/plain/calculate/getLocaleDayOfWeek.js +7 -7
  463. package/dist/plain/calculate/getLocaleEndOfWeek.d.ts +4 -4
  464. package/dist/plain/calculate/getLocaleEndOfWeek.js +5 -5
  465. package/dist/plain/calculate/getLocaleStartOfWeek.d.ts +5 -5
  466. package/dist/plain/calculate/getLocaleStartOfWeek.js +6 -6
  467. package/dist/plain/calculate/getLocaleWeekYear.d.ts +10 -10
  468. package/dist/plain/calculate/getLocaleWeekYear.js +11 -11
  469. package/dist/plain/calculate/getQuarterForDate.js +1 -1
  470. package/dist/plain/calculate/getQuarterForDateTime.js +1 -1
  471. package/dist/plain/calculate/getWeekNumber.js +1 -1
  472. package/dist/plain/calculate/getWeekOfMonth.d.ts +10 -14
  473. package/dist/plain/calculate/getWeekOfMonth.js +11 -15
  474. package/dist/plain/calculate/getWeekYear.js +1 -1
  475. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +7 -7
  476. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +8 -8
  477. package/dist/plain/calculate/getWeeksInMonth.d.ts +8 -11
  478. package/dist/plain/calculate/getWeeksInMonth.js +9 -12
  479. package/dist/plain/calculate/getWeeksInYear.js +1 -1
  480. package/dist/plain/calculate/maxDate.js +1 -1
  481. package/dist/plain/calculate/maxDateTime.js +1 -1
  482. package/dist/plain/calculate/maxTime.js +1 -1
  483. package/dist/plain/calculate/minDate.js +1 -1
  484. package/dist/plain/calculate/minDateTime.js +1 -1
  485. package/dist/plain/calculate/minTime.js +1 -1
  486. package/dist/plain/calculate/nextWeekday.d.ts +14 -12
  487. package/dist/plain/calculate/nextWeekday.js +15 -13
  488. package/dist/plain/calculate/previousWeekday.d.ts +14 -12
  489. package/dist/plain/calculate/previousWeekday.js +15 -13
  490. package/dist/plain/calculate/roundDate.d.ts +1 -1
  491. package/dist/plain/calculate/roundDate.js +1 -1
  492. package/dist/plain/calculate/roundDateTime.d.ts +1 -1
  493. package/dist/plain/calculate/roundDateTime.js +1 -1
  494. package/dist/plain/calculate/roundTime.d.ts +1 -1
  495. package/dist/plain/calculate/roundTime.js +1 -1
  496. package/dist/plain/calculate/setDate.d.ts +21 -4
  497. package/dist/plain/calculate/setDate.js +28 -8
  498. package/dist/plain/calculate/setDateTime.d.ts +16 -4
  499. package/dist/plain/calculate/setDateTime.js +23 -8
  500. package/dist/plain/calculate/setTime.d.ts +14 -2
  501. package/dist/plain/calculate/setTime.js +22 -7
  502. package/dist/plain/calculate/sortDateTimes.js +1 -1
  503. package/dist/plain/calculate/sortDates.js +1 -1
  504. package/dist/plain/calculate/sortTimes.js +1 -1
  505. package/dist/plain/calculate/startOfDate.d.ts +1 -1
  506. package/dist/plain/calculate/startOfDate.js +1 -1
  507. package/dist/plain/calculate/startOfDateTime.d.ts +1 -1
  508. package/dist/plain/calculate/startOfDateTime.js +1 -1
  509. package/dist/plain/calculate/startOfQuarterForDate.js +1 -1
  510. package/dist/plain/calculate/startOfQuarterForDateTime.js +1 -1
  511. package/dist/plain/calculate/startOfTime.d.ts +2 -2
  512. package/dist/plain/calculate/startOfTime.js +1 -1
  513. package/dist/plain/calculate/subtractBusinessDays.d.ts +2 -2
  514. package/dist/plain/calculate/subtractBusinessDays.js +2 -2
  515. package/dist/plain/calculate/subtractDate.js +5 -8
  516. package/dist/plain/calculate/subtractDateTime.js +5 -8
  517. package/dist/plain/calculate/subtractTime.js +5 -8
  518. package/dist/plain/calculate/weekOfYearForDate.js +1 -1
  519. package/dist/plain/calculate/weekOfYearForDateTime.js +1 -1
  520. package/dist/plain/chop/chopDate.js +1 -1
  521. package/dist/plain/chop/chopMilliseconds.js +1 -1
  522. package/dist/plain/chop/chopSeconds.js +1 -1
  523. package/dist/plain/chop/chopTime.js +1 -1
  524. package/dist/plain/compare/areDateTimesEqual.js +1 -1
  525. package/dist/plain/compare/areDateTimesEqualBy.d.ts +2 -4
  526. package/dist/plain/compare/areDateTimesEqualBy.js +2 -4
  527. package/dist/plain/compare/areDatesEqual.js +1 -1
  528. package/dist/plain/compare/areDatesEqualBy.d.ts +5 -5
  529. package/dist/plain/compare/areDatesEqualBy.js +5 -5
  530. package/dist/plain/compare/areTimesEqual.js +1 -1
  531. package/dist/plain/compare/isAfterDate.js +1 -1
  532. package/dist/plain/compare/isAfterDateTime.js +1 -1
  533. package/dist/plain/compare/isAfterTime.js +1 -1
  534. package/dist/plain/compare/isBeforeDate.js +1 -1
  535. package/dist/plain/compare/isBeforeDateTime.js +1 -1
  536. package/dist/plain/compare/isBeforeTime.js +1 -1
  537. package/dist/plain/compare/isBetweenDate.js +1 -1
  538. package/dist/plain/compare/isBetweenDateTime.js +1 -1
  539. package/dist/plain/compare/isBetweenTime.js +1 -1
  540. package/dist/plain/compare/isBusinessDay.d.ts +2 -2
  541. package/dist/plain/compare/isBusinessDay.js +3 -3
  542. package/dist/plain/compare/isRelativeDay.d.ts +1 -1
  543. package/dist/plain/compare/isRelativeDay.js +1 -1
  544. package/dist/plain/compare/isThisUnit.d.ts +8 -6
  545. package/dist/plain/compare/isThisUnit.js +7 -5
  546. package/dist/plain/compare/isWeekend.d.ts +5 -5
  547. package/dist/plain/compare/isWeekend.js +6 -6
  548. package/dist/plain/format/formatCalendar.d.ts +3 -5
  549. package/dist/plain/format/formatCalendar.js +12 -10
  550. package/dist/plain/format/formatDate.d.ts +4 -4
  551. package/dist/plain/format/formatDate.js +8 -7
  552. package/dist/plain/format/formatDateRange.d.ts +4 -4
  553. package/dist/plain/format/formatDateRange.js +8 -7
  554. package/dist/plain/format/formatDateTime.d.ts +4 -4
  555. package/dist/plain/format/formatDateTime.js +8 -7
  556. package/dist/plain/format/formatDateTimeRange.d.ts +4 -4
  557. package/dist/plain/format/formatDateTimeRange.js +8 -7
  558. package/dist/plain/format/formatDateTimeToParts.d.ts +6 -6
  559. package/dist/plain/format/formatDateTimeToParts.js +10 -9
  560. package/dist/plain/format/formatDateToParts.d.ts +6 -6
  561. package/dist/plain/format/formatDateToParts.js +10 -9
  562. package/dist/plain/format/formatRelativeDate.d.ts +3 -3
  563. package/dist/plain/format/formatRelativeDate.js +6 -5
  564. package/dist/plain/format/formatRelativeDateTime.d.ts +3 -3
  565. package/dist/plain/format/formatRelativeDateTime.js +6 -5
  566. package/dist/plain/format/formatRelativeTime.d.ts +3 -3
  567. package/dist/plain/format/formatRelativeTime.js +6 -5
  568. package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
  569. package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +8 -8
  570. package/dist/plain/format/formatTime.d.ts +4 -4
  571. package/dist/plain/format/formatTime.js +8 -7
  572. package/dist/plain/format/index.d.ts +1 -1
  573. package/dist/plain/format/index.js +1 -1
  574. package/dist/plain/get/getDay.js +1 -1
  575. package/dist/plain/get/getDayOfWeek.js +1 -1
  576. package/dist/plain/get/getHour.js +1 -1
  577. package/dist/plain/get/getMicrosecond.js +1 -1
  578. package/dist/plain/get/getMillisecond.js +1 -1
  579. package/dist/plain/get/getMinute.js +1 -1
  580. package/dist/plain/get/getMonth.js +1 -1
  581. package/dist/plain/get/getNanosecond.js +1 -1
  582. package/dist/plain/get/getNow.js +1 -1
  583. package/dist/plain/get/getNowUnit.d.ts +2 -0
  584. package/dist/plain/get/getNowUnit.js +3 -1
  585. package/dist/plain/get/getSecond.js +1 -1
  586. package/dist/plain/get/getToday.js +1 -1
  587. package/dist/plain/get/getWeekOfYear.js +1 -1
  588. package/dist/plain/get/getYear.d.ts +2 -0
  589. package/dist/plain/get/getYear.js +5 -4
  590. package/dist/plain/index.d.ts +1 -1
  591. package/dist/plain/index.js +2 -2
  592. package/dist/plain/interval/intervalAbutsDate.d.ts +1 -2
  593. package/dist/plain/interval/intervalAbutsDate.js +2 -3
  594. package/dist/plain/interval/intervalAbutsDateTime.js +1 -1
  595. package/dist/plain/interval/intervalAbutsTime.js +1 -1
  596. package/dist/plain/interval/intervalContainsDate.d.ts +1 -1
  597. package/dist/plain/interval/intervalContainsDate.js +2 -2
  598. package/dist/plain/interval/intervalContainsDateTime.js +1 -1
  599. package/dist/plain/interval/intervalContainsTime.js +1 -1
  600. package/dist/plain/interval/intervalCountDate.js +1 -1
  601. package/dist/plain/interval/intervalCountDateTime.js +1 -1
  602. package/dist/plain/interval/intervalCountTime.js +1 -1
  603. package/dist/plain/interval/intervalDifferenceDate.d.ts +1 -1
  604. package/dist/plain/interval/intervalDifferenceDate.js +2 -2
  605. package/dist/plain/interval/intervalDifferenceDateTime.js +1 -1
  606. package/dist/plain/interval/intervalDifferenceTime.js +1 -1
  607. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +3 -3
  608. package/dist/plain/interval/intervalDivideEquallyDate.js +3 -3
  609. package/dist/plain/interval/intervalDivideEquallyDateTime.js +1 -1
  610. package/dist/plain/interval/intervalDivideEquallyTime.js +1 -1
  611. package/dist/plain/interval/intervalEngulfsDate.d.ts +1 -1
  612. package/dist/plain/interval/intervalEngulfsDate.js +2 -2
  613. package/dist/plain/interval/intervalEngulfsDateTime.js +1 -1
  614. package/dist/plain/interval/intervalEngulfsTime.js +1 -1
  615. package/dist/plain/interval/intervalFromDurationDate.js +1 -1
  616. package/dist/plain/interval/intervalFromDurationDateTime.js +1 -1
  617. package/dist/plain/interval/intervalFromDurationTime.js +1 -1
  618. package/dist/plain/interval/intervalIntersectionDate.d.ts +1 -1
  619. package/dist/plain/interval/intervalIntersectionDate.js +2 -2
  620. package/dist/plain/interval/intervalIntersectionDateTime.js +1 -1
  621. package/dist/plain/interval/intervalIntersectionTime.js +1 -1
  622. package/dist/plain/interval/intervalLengthDateTime.js +1 -1
  623. package/dist/plain/interval/intervalLengthTime.js +1 -1
  624. package/dist/plain/interval/intervalOverlappingDaysDate.js +1 -1
  625. package/dist/plain/interval/intervalOverlappingDaysDateTime.js +1 -1
  626. package/dist/plain/interval/intervalSplitAtDate.d.ts +1 -1
  627. package/dist/plain/interval/intervalSplitAtDate.js +2 -2
  628. package/dist/plain/interval/intervalSplitAtDateTime.js +1 -1
  629. package/dist/plain/interval/intervalSplitAtTime.js +1 -1
  630. package/dist/plain/interval/intervalUnionDate.d.ts +2 -2
  631. package/dist/plain/interval/intervalUnionDate.js +3 -3
  632. package/dist/plain/interval/intervalUnionDateTime.js +1 -1
  633. package/dist/plain/interval/intervalUnionTime.js +1 -1
  634. package/dist/plain/interval/intervalXorAllDate.d.ts +1 -1
  635. package/dist/plain/interval/intervalXorAllDate.js +4 -4
  636. package/dist/plain/interval/intervalXorAllDateTime.js +3 -3
  637. package/dist/plain/interval/intervalXorAllTime.js +3 -3
  638. package/dist/plain/interval/intervalXorDate.d.ts +1 -1
  639. package/dist/plain/interval/intervalXorDate.js +2 -2
  640. package/dist/plain/interval/intervalXorDateTime.js +1 -1
  641. package/dist/plain/interval/intervalXorTime.js +1 -1
  642. package/dist/plain/interval/intervalsOverlapDate.d.ts +1 -1
  643. package/dist/plain/interval/intervalsOverlapDate.js +2 -2
  644. package/dist/plain/interval/intervalsOverlapDateTime.js +1 -1
  645. package/dist/plain/interval/intervalsOverlapTime.js +1 -1
  646. package/dist/plain/interval/mergeIntervalsDate.d.ts +1 -1
  647. package/dist/plain/interval/mergeIntervalsDate.js +4 -4
  648. package/dist/plain/interval/mergeIntervalsDateTime.js +3 -3
  649. package/dist/plain/interval/mergeIntervalsTime.js +3 -3
  650. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +2 -3
  651. package/dist/plain/interval/splitIntervalByUnitDate.js +3 -4
  652. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +2 -1
  653. package/dist/plain/interval/splitIntervalByUnitDateTime.js +3 -2
  654. package/dist/plain/interval/splitIntervalByUnitTime.js +1 -1
  655. package/dist/plain/interval/validate/isValidDateInterval.d.ts +1 -1
  656. package/dist/plain/interval/validate/isValidDateInterval.js +2 -2
  657. package/dist/plain/interval/validate/isValidDateTimeInterval.js +1 -1
  658. package/dist/plain/interval/validate/isValidTimeInterval.js +1 -1
  659. package/dist/plain/locale/getLocaleEraNames.d.ts +6 -6
  660. package/dist/plain/locale/getLocaleEraNames.js +8 -7
  661. package/dist/plain/locale/getLocaleMeridiems.d.ts +5 -5
  662. package/dist/plain/locale/getLocaleMeridiems.js +7 -6
  663. package/dist/plain/locale/getLocaleMonthNames.d.ts +6 -6
  664. package/dist/plain/locale/getLocaleMonthNames.js +17 -11
  665. package/dist/plain/locale/getLocaleWeekdayNames.d.ts +3 -3
  666. package/dist/plain/locale/getLocaleWeekdayNames.js +12 -5
  667. package/dist/plain/map/mapDatesInRange.js +1 -1
  668. package/dist/plain/map/mapDaysInMonth.js +1 -1
  669. package/dist/plain/parse/index.d.ts +1 -1
  670. package/dist/plain/parse/index.js +1 -1
  671. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +28 -14
  672. package/dist/plain/parse/parseDateTimeWithPattern.js +33 -17
  673. package/dist/plain/parse/parseDateWithPattern.d.ts +29 -14
  674. package/dist/plain/parse/parseDateWithPattern.js +34 -17
  675. package/dist/plain/parse/parseDayFromDate.js +1 -1
  676. package/dist/plain/parse/parseDayFromDateTime.js +1 -1
  677. package/dist/plain/parse/parseDayOfWeekFromDate.js +1 -1
  678. package/dist/plain/parse/parseDayOfWeekFromDateTime.js +1 -1
  679. package/dist/plain/parse/parseHourFromDateTime.js +1 -1
  680. package/dist/plain/parse/parseHourFromTime.js +1 -1
  681. package/dist/plain/parse/parseMicrosecondFromDateTime.js +1 -1
  682. package/dist/plain/parse/parseMicrosecondFromTime.js +1 -1
  683. package/dist/plain/parse/parseMillisecondFromDateTime.js +1 -1
  684. package/dist/plain/parse/parseMillisecondFromTime.js +1 -1
  685. package/dist/plain/parse/parseMinuteFromDateTime.js +1 -1
  686. package/dist/plain/parse/parseMinuteFromTime.js +1 -1
  687. package/dist/plain/parse/parseMonthFromDate.js +1 -1
  688. package/dist/plain/parse/parseMonthFromDateTime.js +1 -1
  689. package/dist/plain/parse/parseNanosecondFromDateTime.js +1 -1
  690. package/dist/plain/parse/parseNanosecondFromTime.js +1 -1
  691. package/dist/plain/parse/parseSecondFromDateTime.js +1 -1
  692. package/dist/plain/parse/parseSecondFromTime.js +1 -1
  693. package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
  694. package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +9 -9
  695. package/dist/plain/parse/parseTimeWithPattern.d.ts +6 -4
  696. package/dist/plain/parse/parseTimeWithPattern.js +8 -5
  697. package/dist/plain/parse/parseUnitFromDate.d.ts +4 -1
  698. package/dist/plain/parse/parseUnitFromDate.js +6 -2
  699. package/dist/plain/parse/parseUnitFromDateTime.d.ts +4 -1
  700. package/dist/plain/parse/parseUnitFromDateTime.js +6 -2
  701. package/dist/plain/parse/parseUnitFromTime.d.ts +1 -1
  702. package/dist/plain/parse/parseUnitFromTime.js +1 -1
  703. package/dist/plain/parse/parseWeekFromDateTime.js +1 -1
  704. package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
  705. package/dist/plain/parse/parseYearFromDate.js +8 -4
  706. package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
  707. package/dist/plain/parse/parseYearFromDateTime.js +7 -4
  708. package/dist/plain/validate/{isLeapSecond.d.ts → hasSecond60.d.ts} +16 -14
  709. package/dist/plain/validate/{isLeapSecond.js → hasSecond60.js} +16 -14
  710. package/dist/plain/validate/index.d.ts +2 -1
  711. package/dist/plain/validate/index.js +2 -1
  712. package/dist/plain/validate/isLeapYear.js +1 -1
  713. package/dist/plain/validate/isValidDate.js +2 -17
  714. package/dist/plain/validate/isValidDateRange.js +1 -1
  715. package/dist/plain/validate/isValidDateTime.d.ts +1 -1
  716. package/dist/plain/validate/isValidDateTime.js +4 -4
  717. package/dist/plain/validate/isValidDateTimeRange.js +1 -1
  718. package/dist/plain/validate/isValidIsoDateLike.js +3 -3
  719. package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
  720. package/dist/plain/validate/isValidSqlDateTime.js +36 -0
  721. package/dist/plain/validate/isValidTime.js +2 -18
  722. package/dist/plain/validate/isValidTimeRange.js +1 -1
  723. package/dist/precision/convert/fromNanoseconds.d.ts +11 -5
  724. package/dist/precision/convert/fromNanoseconds.js +12 -6
  725. package/dist/precision/convert/toNanoseconds.d.ts +2 -2
  726. package/dist/precision/convert/toNanoseconds.js +2 -2
  727. package/dist/precision/index.d.ts +1 -1
  728. package/dist/precision/index.js +2 -2
  729. package/dist/precision/validate/isValidInstant.d.ts +1 -1
  730. package/dist/precision/validate/isValidInstant.js +1 -1
  731. package/dist/regex/calendar-zoned-date-time.d.ts +4 -4
  732. package/dist/regex/calendar-zoned-date-time.js +4 -4
  733. package/dist/regex/epcis.d.ts +60 -0
  734. package/dist/regex/epcis.js +60 -0
  735. package/dist/regex/http-date.d.ts +6 -4
  736. package/dist/regex/http-date.js +6 -4
  737. package/dist/regex/index.d.ts +2 -1
  738. package/dist/regex/index.js +3 -2
  739. package/dist/regex/leap-second.d.ts +1 -1
  740. package/dist/regex/leap-second.js +1 -1
  741. package/dist/regex/rfc-2822.d.ts +2 -0
  742. package/dist/regex/rfc-2822.js +2 -0
  743. package/dist/regex/rfc-3339.d.ts +3 -1
  744. package/dist/regex/rfc-3339.js +3 -1
  745. package/dist/regex/sql-date-time.d.ts +2 -1
  746. package/dist/regex/sql-date-time.js +2 -1
  747. package/dist/regex/time-zone-like.d.ts +5 -4
  748. package/dist/regex/time-zone-like.js +5 -4
  749. package/dist/regex/utc-offset.d.ts +2 -1
  750. package/dist/regex/utc-offset.js +2 -1
  751. package/dist/span/calculate/spanMs.d.ts +4 -3
  752. package/dist/span/calculate/spanMs.js +4 -3
  753. package/dist/span/calculate/spanNs.d.ts +4 -3
  754. package/dist/span/calculate/spanNs.js +4 -3
  755. package/dist/span/calculate/spanWallClock.d.ts +12 -12
  756. package/dist/span/calculate/spanWallClock.js +13 -13
  757. package/dist/span/index.d.ts +1 -1
  758. package/dist/span/index.js +2 -2
  759. package/dist/span/validate/isValidSpan.d.ts +3 -3
  760. package/dist/span/validate/isValidSpan.js +3 -3
  761. package/dist/timescale/calculate/index.d.ts +3 -0
  762. package/dist/timescale/calculate/index.js +3 -0
  763. package/dist/timescale/calculate/leapSecondsBetween.d.ts +26 -0
  764. package/dist/timescale/calculate/leapSecondsBetween.js +62 -0
  765. package/dist/timescale/calculate/nextLeapSecond.d.ts +18 -0
  766. package/dist/timescale/calculate/nextLeapSecond.js +33 -0
  767. package/dist/timescale/calculate/taiMinusUtc.d.ts +21 -0
  768. package/dist/timescale/calculate/taiMinusUtc.js +38 -0
  769. package/dist/timescale/convert/fromTAI.d.ts +22 -0
  770. package/dist/timescale/convert/fromTAI.js +35 -0
  771. package/dist/timescale/convert/index.d.ts +2 -0
  772. package/dist/timescale/convert/index.js +2 -0
  773. package/dist/timescale/convert/toTAI.d.ts +23 -0
  774. package/dist/timescale/convert/toTAI.js +39 -0
  775. package/dist/timescale/index.d.ts +4 -0
  776. package/dist/timescale/index.js +5 -0
  777. package/dist/timescale/validate/index.d.ts +1 -0
  778. package/dist/timescale/validate/index.js +1 -0
  779. package/dist/timescale/validate/isLeapSecond.d.ts +25 -0
  780. package/dist/timescale/validate/isLeapSecond.js +36 -0
  781. package/dist/transport/calculate/crossingTime.d.ts +8 -3
  782. package/dist/transport/calculate/crossingTime.js +9 -4
  783. package/dist/transport/calculate/cutoffAt.d.ts +10 -5
  784. package/dist/transport/calculate/cutoffAt.js +26 -133
  785. package/dist/transport/calculate/cutoffSchedule.d.ts +8 -3
  786. package/dist/transport/calculate/cutoffSchedule.js +54 -20
  787. package/dist/transport/calculate/dwellTime.d.ts +9 -4
  788. package/dist/transport/calculate/dwellTime.js +10 -5
  789. package/dist/transport/calculate/estimateDrift.d.ts +1 -1
  790. package/dist/transport/calculate/estimateDrift.js +1 -1
  791. package/dist/transport/calculate/nextDeparture.d.ts +2 -2
  792. package/dist/transport/calculate/nextDeparture.js +2 -2
  793. package/dist/transport/calculate/scheduleDelivery.d.ts +15 -7
  794. package/dist/transport/calculate/scheduleDelivery.js +9 -4
  795. package/dist/transport/calculate/transitTime.d.ts +11 -11
  796. package/dist/transport/calculate/transitTime.js +11 -11
  797. package/dist/transport/compare/classifyPunctuality.d.ts +1 -1
  798. package/dist/transport/compare/classifyPunctuality.js +1 -1
  799. package/dist/transport/compare/isPastCutoff.d.ts +1 -1
  800. package/dist/transport/compare/isPastCutoff.js +2 -2
  801. package/dist/transport/compare/scheduleDeviation.d.ts +1 -1
  802. package/dist/transport/compare/scheduleDeviation.js +1 -1
  803. package/dist/transport/compare/timeToCutoff.d.ts +1 -1
  804. package/dist/transport/compare/timeToCutoff.js +1 -1
  805. package/dist/transport/convert/etaAtZone.d.ts +8 -3
  806. package/dist/transport/convert/etaAtZone.js +8 -3
  807. package/dist/transport/index.d.ts +1 -1
  808. package/dist/transport/index.js +2 -2
  809. package/dist/types/business-calendar.d.ts +5 -4
  810. package/dist/types/date-duration-unit.d.ts +1 -1
  811. package/dist/types/date-time-duration-units.d.ts +1 -1
  812. package/dist/types/date-time-unit.d.ts +1 -1
  813. package/dist/types/date-unit.d.ts +1 -1
  814. package/dist/types/disambiguation.d.ts +1 -1
  815. package/dist/types/duration-relative-to.d.ts +1 -1
  816. package/dist/types/duration-string-options.d.ts +1 -1
  817. package/dist/types/duty.d.ts +777 -0
  818. package/dist/types/duty.js +0 -0
  819. package/dist/types/edi.d.ts +407 -0
  820. package/dist/types/edi.js +0 -0
  821. package/dist/types/epcis.d.ts +25 -0
  822. package/dist/types/epcis.js +0 -0
  823. package/dist/types/exact-duration-unit.d.ts +8 -0
  824. package/dist/types/exact-duration-unit.js +0 -0
  825. package/dist/types/fiscal-calendar.d.ts +40 -4
  826. package/dist/types/free-time-options.d.ts +4 -3
  827. package/dist/types/gnss.d.ts +51 -0
  828. package/dist/types/gnss.js +0 -0
  829. package/dist/types/index.d.ts +7 -0
  830. package/dist/types/index.js +7 -0
  831. package/dist/types/now-unit.d.ts +1 -1
  832. package/dist/types/offset.d.ts +1 -1
  833. package/dist/types/operating-schedule.d.ts +3 -2
  834. package/dist/types/overflow.d.ts +1 -1
  835. package/dist/types/rounding-options.d.ts +1 -1
  836. package/dist/types/stored-zoned-classification.d.ts +83 -0
  837. package/dist/types/stored-zoned-classification.js +0 -0
  838. package/dist/types/time-duration-unit.d.ts +1 -1
  839. package/dist/types/time-unit.d.ts +1 -1
  840. package/dist/types/two-digit-year.d.ts +23 -0
  841. package/dist/types/two-digit-year.js +0 -0
  842. package/dist/types/utc-now-unit.d.ts +1 -1
  843. package/dist/types/zone-bucket-unit.d.ts +1 -1
  844. package/dist/unix/calculate/addUnix.d.ts +11 -2
  845. package/dist/unix/calculate/addUnix.js +14 -11
  846. package/dist/unix/calculate/diffUnix.d.ts +11 -3
  847. package/dist/unix/calculate/diffUnix.js +11 -6
  848. package/dist/unix/calculate/diffUnixAsDuration.d.ts +11 -3
  849. package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
  850. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
  851. package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
  852. package/dist/unix/calculate/endOfUnix.d.ts +13 -4
  853. package/dist/unix/calculate/endOfUnix.js +8 -1
  854. package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
  855. package/dist/unix/calculate/isBetweenUnix.js +4 -4
  856. package/dist/unix/calculate/roundUnix.d.ts +17 -7
  857. package/dist/unix/calculate/roundUnix.js +19 -10
  858. package/dist/unix/calculate/setUnix.d.ts +28 -8
  859. package/dist/unix/calculate/setUnix.js +35 -14
  860. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
  861. package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
  862. package/dist/unix/calculate/startOfUnix.d.ts +13 -4
  863. package/dist/unix/calculate/startOfUnix.js +8 -1
  864. package/dist/unix/calculate/subtractUnix.d.ts +10 -2
  865. package/dist/unix/calculate/subtractUnix.js +13 -11
  866. package/dist/unix/compare/areUnixEqualBy.d.ts +13 -4
  867. package/dist/unix/compare/areUnixEqualBy.js +8 -1
  868. package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
  869. package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
  870. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
  871. package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
  872. package/dist/unix/convert/convertUnixToPlainTime.d.ts +6 -3
  873. package/dist/unix/convert/convertUnixToPlainTime.js +6 -5
  874. package/dist/unix/convert/convertUnixToZoned.d.ts +6 -2
  875. package/dist/unix/convert/convertUnixToZoned.js +6 -2
  876. package/dist/unix/format/formatCalendarUnix.d.ts +16 -11
  877. package/dist/unix/format/formatCalendarUnix.js +12 -7
  878. package/dist/unix/format/formatRelativeUnix.d.ts +17 -9
  879. package/dist/unix/format/formatRelativeUnix.js +19 -11
  880. package/dist/unix/format/formatUnix.d.ts +16 -11
  881. package/dist/unix/format/formatUnix.js +13 -9
  882. package/dist/unix/get/getUnixDay.d.ts +1 -3
  883. package/dist/unix/get/getUnixDay.js +6 -13
  884. package/dist/unix/get/getUnixHour.d.ts +1 -3
  885. package/dist/unix/get/getUnixHour.js +6 -13
  886. package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
  887. package/dist/unix/get/getUnixMicrosecond.js +5 -12
  888. package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
  889. package/dist/unix/get/getUnixMillisecond.js +6 -13
  890. package/dist/unix/get/getUnixMinute.d.ts +1 -3
  891. package/dist/unix/get/getUnixMinute.js +6 -13
  892. package/dist/unix/get/getUnixMonth.d.ts +1 -3
  893. package/dist/unix/get/getUnixMonth.js +6 -13
  894. package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
  895. package/dist/unix/get/getUnixNanosecond.js +5 -12
  896. package/dist/unix/get/getUnixNow.js +1 -1
  897. package/dist/unix/get/getUnixNowUnit.d.ts +3 -1
  898. package/dist/unix/get/getUnixNowUnit.js +3 -1
  899. package/dist/unix/get/getUnixSecond.d.ts +1 -3
  900. package/dist/unix/get/getUnixSecond.js +6 -13
  901. package/dist/unix/get/getUnixYear.d.ts +3 -3
  902. package/dist/unix/get/getUnixYear.js +6 -13
  903. package/dist/unix/index.d.ts +1 -1
  904. package/dist/unix/index.js +2 -2
  905. package/dist/unix/interval/intervalCountUnix.d.ts +11 -2
  906. package/dist/unix/interval/intervalCountUnix.js +7 -0
  907. package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
  908. package/dist/unix/interval/intervalFromDurationUnix.js +13 -8
  909. package/dist/unix/interval/intervalLengthUnix.d.ts +12 -4
  910. package/dist/unix/interval/intervalLengthUnix.js +8 -2
  911. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
  912. package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
  913. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +13 -4
  914. package/dist/unix/interval/splitIntervalByUnitUnix.js +16 -9
  915. package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
  916. package/dist/unix/parse/parseDateFromUnix.js +3 -3
  917. package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
  918. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
  919. package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
  920. package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
  921. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
  922. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
  923. package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
  924. package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
  925. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
  926. package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
  927. package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
  928. package/dist/unix/parse/parseTimeFromUnix.js +4 -3
  929. package/dist/unix/parse/parseUnitFromUnix.d.ts +10 -4
  930. package/dist/unix/parse/parseUnitFromUnix.js +21 -14
  931. package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
  932. package/dist/unix/parse/parseWeekFromUnix.js +4 -4
  933. package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
  934. package/dist/unix/parse/parseYearFromUnix.js +4 -1
  935. package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
  936. package/dist/utc/calculate/addUtc.js +5 -8
  937. package/dist/utc/calculate/diffUtc.d.ts +1 -1
  938. package/dist/utc/calculate/diffUtc.js +1 -1
  939. package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
  940. package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
  941. package/dist/utc/calculate/endOfQuarterForUtc.js +1 -1
  942. package/dist/utc/calculate/endOfUtc.d.ts +1 -1
  943. package/dist/utc/calculate/isBetweenUtc.js +1 -1
  944. package/dist/utc/calculate/maxUtc.js +1 -1
  945. package/dist/utc/calculate/minUtc.js +1 -1
  946. package/dist/utc/calculate/roundUtc.d.ts +1 -1
  947. package/dist/utc/calculate/roundUtc.js +1 -1
  948. package/dist/utc/calculate/setUtc.d.ts +17 -4
  949. package/dist/utc/calculate/setUtc.js +23 -9
  950. package/dist/utc/calculate/sortUtc.js +1 -1
  951. package/dist/utc/calculate/startOfQuarterForUtc.js +1 -1
  952. package/dist/utc/calculate/startOfUtc.d.ts +1 -1
  953. package/dist/utc/calculate/subtractUtc.js +5 -8
  954. package/dist/utc/compare/areUtcEqual.js +1 -1
  955. package/dist/utc/compare/areUtcEqualBy.d.ts +2 -2
  956. package/dist/utc/compare/areUtcEqualBy.js +2 -2
  957. package/dist/utc/compare/isAfterUtc.js +1 -1
  958. package/dist/utc/compare/isBeforeUtc.js +1 -1
  959. package/dist/utc/convert/convertUtcToPlainDate.d.ts +9 -3
  960. package/dist/utc/convert/convertUtcToPlainDate.js +12 -9
  961. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +10 -3
  962. package/dist/utc/convert/convertUtcToPlainDateTime.js +14 -15
  963. package/dist/utc/convert/convertUtcToPlainTime.d.ts +6 -3
  964. package/dist/utc/convert/convertUtcToPlainTime.js +9 -8
  965. package/dist/utc/convert/convertUtcToUnix.js +1 -1
  966. package/dist/utc/convert/convertUtcToZoned.d.ts +6 -2
  967. package/dist/utc/convert/convertUtcToZoned.js +7 -3
  968. package/dist/utc/format/formatCalendarUtc.d.ts +12 -7
  969. package/dist/utc/format/formatCalendarUtc.js +9 -4
  970. package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
  971. package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +8 -8
  972. package/dist/utc/format/formatRelativeUtc.d.ts +15 -7
  973. package/dist/utc/format/formatRelativeUtc.js +17 -9
  974. package/dist/utc/format/formatUtc.d.ts +15 -10
  975. package/dist/utc/format/formatUtc.js +12 -8
  976. package/dist/utc/format/index.d.ts +1 -1
  977. package/dist/utc/format/index.js +1 -1
  978. package/dist/utc/get/getUtcDay.d.ts +1 -3
  979. package/dist/utc/get/getUtcDay.js +6 -13
  980. package/dist/utc/get/getUtcHour.d.ts +1 -3
  981. package/dist/utc/get/getUtcHour.js +6 -13
  982. package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
  983. package/dist/utc/get/getUtcMicrosecond.js +5 -12
  984. package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
  985. package/dist/utc/get/getUtcMillisecond.js +6 -13
  986. package/dist/utc/get/getUtcMinute.d.ts +1 -3
  987. package/dist/utc/get/getUtcMinute.js +6 -13
  988. package/dist/utc/get/getUtcMonth.d.ts +1 -3
  989. package/dist/utc/get/getUtcMonth.js +6 -13
  990. package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
  991. package/dist/utc/get/getUtcNanosecond.js +5 -12
  992. package/dist/utc/get/getUtcNow.d.ts +1 -3
  993. package/dist/utc/get/getUtcNow.js +3 -10
  994. package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
  995. package/dist/utc/get/getUtcNowUnit.js +3 -1
  996. package/dist/utc/get/getUtcSecond.d.ts +1 -3
  997. package/dist/utc/get/getUtcSecond.js +6 -13
  998. package/dist/utc/get/getUtcYear.d.ts +3 -3
  999. package/dist/utc/get/getUtcYear.js +6 -13
  1000. package/dist/utc/index.d.ts +1 -1
  1001. package/dist/utc/index.js +2 -2
  1002. package/dist/utc/interval/intervalAbutsUtc.js +1 -1
  1003. package/dist/utc/interval/intervalContainsUtc.js +1 -1
  1004. package/dist/utc/interval/intervalCountUtc.js +1 -1
  1005. package/dist/utc/interval/intervalDivideEquallyUtc.js +1 -1
  1006. package/dist/utc/interval/intervalEngulfsUtc.js +1 -1
  1007. package/dist/utc/interval/intervalFromDurationUtc.js +1 -1
  1008. package/dist/utc/interval/intervalLengthUtc.js +1 -1
  1009. package/dist/utc/interval/intervalOverlappingDaysUtc.js +1 -1
  1010. package/dist/utc/interval/intervalSplitAtUtc.js +1 -1
  1011. package/dist/utc/interval/intervalXorAllUtc.js +3 -3
  1012. package/dist/utc/interval/intervalXorUtc.js +1 -1
  1013. package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
  1014. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +2 -1
  1015. package/dist/utc/interval/splitIntervalByUnitUtc.js +3 -2
  1016. package/dist/utc/interval/validate/isValidUtcInterval.js +1 -1
  1017. package/dist/utc/parse/index.d.ts +1 -1
  1018. package/dist/utc/parse/index.js +1 -1
  1019. package/dist/utc/parse/parseDateFromUtc.d.ts +5 -3
  1020. package/dist/utc/parse/parseDateFromUtc.js +3 -3
  1021. package/dist/utc/parse/parseDayFromUtc.d.ts +5 -3
  1022. package/dist/utc/parse/parseDayFromUtc.js +3 -3
  1023. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +5 -3
  1024. package/dist/utc/parse/parseDayOfWeekFromUtc.js +6 -6
  1025. package/dist/utc/parse/parseHourFromUtc.d.ts +5 -3
  1026. package/dist/utc/parse/parseHourFromUtc.js +3 -3
  1027. package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
  1028. package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +13 -13
  1029. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +5 -3
  1030. package/dist/utc/parse/parseMicrosecondFromUtc.js +3 -3
  1031. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +5 -3
  1032. package/dist/utc/parse/parseMillisecondFromUtc.js +3 -3
  1033. package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
  1034. package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
  1035. package/dist/utc/parse/parseMonthFromUtc.d.ts +5 -3
  1036. package/dist/utc/parse/parseMonthFromUtc.js +3 -3
  1037. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +5 -3
  1038. package/dist/utc/parse/parseNanosecondFromUtc.js +3 -3
  1039. package/dist/utc/parse/parseSecondFromUtc.d.ts +5 -3
  1040. package/dist/utc/parse/parseSecondFromUtc.js +3 -3
  1041. package/dist/utc/parse/parseTimeFromUtc.d.ts +6 -3
  1042. package/dist/utc/parse/parseTimeFromUtc.js +7 -6
  1043. package/dist/utc/parse/parseUnitFromUtc.d.ts +12 -5
  1044. package/dist/utc/parse/parseUnitFromUtc.js +13 -7
  1045. package/dist/utc/parse/parseWeekFromUtc.d.ts +5 -3
  1046. package/dist/utc/parse/parseWeekFromUtc.js +6 -6
  1047. package/dist/utc/parse/parseYearFromUtc.d.ts +9 -5
  1048. package/dist/utc/parse/parseYearFromUtc.js +9 -6
  1049. package/dist/utc/validate/index.d.ts +2 -0
  1050. package/dist/utc/validate/index.js +2 -0
  1051. package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
  1052. package/dist/utc/validate/isValidHttpDate.js +38 -0
  1053. package/dist/utc/validate/isValidUtc.d.ts +4 -0
  1054. package/dist/utc/validate/isValidUtc.js +7 -3
  1055. package/dist/utc/validate/isValidUtcRange.js +1 -1
  1056. package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
  1057. package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
  1058. package/dist/workforce/calculate/dutyDayFor.d.ts +38 -0
  1059. package/dist/workforce/calculate/dutyDayFor.js +71 -0
  1060. package/dist/workforce/calculate/dutyTotals.d.ts +24 -0
  1061. package/dist/workforce/calculate/dutyTotals.js +41 -0
  1062. package/dist/workforce/calculate/dutyViolations.d.ts +74 -0
  1063. package/dist/workforce/calculate/dutyViolations.js +65 -0
  1064. package/dist/workforce/calculate/evaluateDutyLog.d.ts +77 -0
  1065. package/dist/workforce/calculate/evaluateDutyLog.js +75 -0
  1066. package/dist/workforce/calculate/index.d.ts +7 -0
  1067. package/dist/workforce/calculate/index.js +7 -0
  1068. package/dist/workforce/calculate/longestRun.d.ts +28 -0
  1069. package/dist/workforce/calculate/longestRun.js +54 -0
  1070. package/dist/workforce/calculate/qualifyingRestPairs.d.ts +37 -0
  1071. package/dist/workforce/calculate/qualifyingRestPairs.js +58 -0
  1072. package/dist/workforce/calculate/qualifyingRests.d.ts +27 -0
  1073. package/dist/workforce/calculate/qualifyingRests.js +49 -0
  1074. package/dist/workforce/index.d.ts +3 -0
  1075. package/dist/workforce/index.js +4 -0
  1076. package/dist/workforce/validate/index.d.ts +1 -0
  1077. package/dist/workforce/validate/index.js +1 -0
  1078. package/dist/workforce/validate/isValidDutyLog.d.ts +24 -0
  1079. package/dist/workforce/validate/isValidDutyLog.js +34 -0
  1080. package/dist/zoned/calculate/addZoned.d.ts +15 -15
  1081. package/dist/zoned/calculate/addZoned.js +19 -22
  1082. package/dist/zoned/calculate/addZonedBusinessDays.d.ts +5 -4
  1083. package/dist/zoned/calculate/addZonedBusinessDays.js +5 -4
  1084. package/dist/zoned/calculate/clampZoned.js +1 -1
  1085. package/dist/zoned/calculate/diffZoned.d.ts +8 -8
  1086. package/dist/zoned/calculate/diffZoned.js +7 -7
  1087. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +5 -5
  1088. package/dist/zoned/calculate/diffZonedAsDuration.js +4 -4
  1089. package/dist/zoned/calculate/endOfZoned.d.ts +3 -3
  1090. package/dist/zoned/calculate/endOfZoned.js +2 -2
  1091. package/dist/zoned/calculate/getHoursInZonedDay.d.ts +2 -2
  1092. package/dist/zoned/calculate/getHoursInZonedDay.js +2 -2
  1093. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.d.ts +6 -5
  1094. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.js +6 -5
  1095. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +5 -5
  1096. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -5
  1097. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +6 -6
  1098. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +6 -6
  1099. package/dist/zoned/calculate/maxZoned.d.ts +2 -2
  1100. package/dist/zoned/calculate/maxZoned.js +3 -3
  1101. package/dist/zoned/calculate/minZoned.d.ts +2 -2
  1102. package/dist/zoned/calculate/minZoned.js +3 -3
  1103. package/dist/zoned/calculate/roundZoned.d.ts +11 -9
  1104. package/dist/zoned/calculate/roundZoned.js +11 -9
  1105. package/dist/zoned/calculate/setZoned.d.ts +26 -12
  1106. package/dist/zoned/calculate/setZoned.js +33 -16
  1107. package/dist/zoned/calculate/sortZoned.d.ts +3 -3
  1108. package/dist/zoned/calculate/sortZoned.js +4 -4
  1109. package/dist/zoned/calculate/startOfZoned.d.ts +3 -3
  1110. package/dist/zoned/calculate/startOfZoned.js +2 -2
  1111. package/dist/zoned/calculate/subtractZoned.d.ts +14 -14
  1112. package/dist/zoned/calculate/subtractZoned.js +18 -21
  1113. package/dist/zoned/calculate/subtractZonedBusinessDays.d.ts +5 -4
  1114. package/dist/zoned/calculate/subtractZonedBusinessDays.js +5 -4
  1115. package/dist/zoned/chop/chopZonedDate.d.ts +1 -1
  1116. package/dist/zoned/chop/chopZonedDate.js +1 -1
  1117. package/dist/zoned/chop/chopZonedMilliseconds.d.ts +1 -1
  1118. package/dist/zoned/chop/chopZonedMilliseconds.js +1 -1
  1119. package/dist/zoned/chop/chopZonedSeconds.d.ts +1 -1
  1120. package/dist/zoned/chop/chopZonedSeconds.js +1 -1
  1121. package/dist/zoned/chop/chopZonedTime.d.ts +1 -1
  1122. package/dist/zoned/chop/chopZonedTime.js +1 -1
  1123. package/dist/zoned/chop/chopZonedTimezone.d.ts +1 -1
  1124. package/dist/zoned/chop/chopZonedTimezone.js +1 -1
  1125. package/dist/zoned/classify/classifyStoredZoned.d.ts +46 -0
  1126. package/dist/zoned/classify/classifyStoredZoned.js +177 -0
  1127. package/dist/zoned/classify/index.d.ts +1 -0
  1128. package/dist/zoned/classify/index.js +1 -0
  1129. package/dist/zoned/compare/areZonedEqual.js +1 -1
  1130. package/dist/zoned/compare/areZonedEqualBy.d.ts +8 -10
  1131. package/dist/zoned/compare/areZonedEqualBy.js +8 -10
  1132. package/dist/zoned/compare/isAfterZoned.js +1 -1
  1133. package/dist/zoned/compare/isBeforeZoned.d.ts +2 -2
  1134. package/dist/zoned/compare/isBeforeZoned.js +3 -3
  1135. package/dist/zoned/compare/isBetweenZoned.js +1 -1
  1136. package/dist/zoned/compare/isInDaylightSaving.d.ts +2 -2
  1137. package/dist/zoned/compare/isInDaylightSaving.js +2 -2
  1138. package/dist/zoned/compare/isZonedBusinessDay.d.ts +7 -6
  1139. package/dist/zoned/compare/isZonedBusinessDay.js +7 -6
  1140. package/dist/zoned/compare/isZonedFuture.js +1 -1
  1141. package/dist/zoned/compare/isZonedPast.js +1 -1
  1142. package/dist/zoned/compare/isZonedRelativeDay.d.ts +2 -2
  1143. package/dist/zoned/compare/isZonedRelativeDay.js +3 -3
  1144. package/dist/zoned/compare/isZonedThisUnit.d.ts +7 -7
  1145. package/dist/zoned/compare/isZonedThisUnit.js +7 -7
  1146. package/dist/zoned/compare/isZonedWeekend.d.ts +5 -5
  1147. package/dist/zoned/compare/isZonedWeekend.js +5 -5
  1148. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +10 -7
  1149. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +10 -7
  1150. package/dist/zoned/convert/convertZonedToCalendar.d.ts +5 -5
  1151. package/dist/zoned/convert/convertZonedToCalendar.js +5 -5
  1152. package/dist/zoned/convert/convertZonedToPlainDateTime.d.ts +3 -3
  1153. package/dist/zoned/convert/convertZonedToPlainDateTime.js +3 -3
  1154. package/dist/zoned/convert/convertZonedToZoned.d.ts +7 -3
  1155. package/dist/zoned/convert/convertZonedToZoned.js +7 -3
  1156. package/dist/zoned/format/formatCalendarZoned.d.ts +7 -6
  1157. package/dist/zoned/format/formatCalendarZoned.js +7 -6
  1158. package/dist/zoned/format/formatRelativeZoned.d.ts +3 -3
  1159. package/dist/zoned/format/formatRelativeZoned.js +6 -5
  1160. package/dist/zoned/format/formatRfc2822.d.ts +3 -3
  1161. package/dist/zoned/format/formatRfc2822.js +3 -3
  1162. package/dist/zoned/format/formatRfc3339.d.ts +2 -2
  1163. package/dist/zoned/format/formatRfc3339.js +2 -2
  1164. package/dist/zoned/format/formatTimeZoneName.d.ts +22 -18
  1165. package/dist/zoned/format/formatTimeZoneName.js +18 -13
  1166. package/dist/zoned/format/formatZonedDateTime.d.ts +10 -10
  1167. package/dist/zoned/format/formatZonedDateTime.js +12 -11
  1168. package/dist/zoned/format/formatZonedRange.d.ts +7 -7
  1169. package/dist/zoned/format/formatZonedRange.js +9 -8
  1170. package/dist/zoned/format/formatZonedToParts.d.ts +11 -11
  1171. package/dist/zoned/format/formatZonedToParts.js +13 -12
  1172. package/dist/zoned/get/getDstTransitions.d.ts +14 -12
  1173. package/dist/zoned/get/getDstTransitions.js +15 -10
  1174. package/dist/zoned/get/getSystemTimeZone.d.ts +5 -3
  1175. package/dist/zoned/get/getSystemTimeZone.js +7 -4
  1176. package/dist/zoned/get/getTimeZoneOffset.d.ts +15 -7
  1177. package/dist/zoned/get/getTimeZoneOffset.js +23 -10
  1178. package/dist/zoned/get/getTimeZones.d.ts +1 -1
  1179. package/dist/zoned/get/getTimeZones.js +1 -1
  1180. package/dist/zoned/get/getZonedDay.d.ts +3 -2
  1181. package/dist/zoned/get/getZonedDay.js +7 -8
  1182. package/dist/zoned/get/getZonedDayOfWeek.d.ts +3 -2
  1183. package/dist/zoned/get/getZonedDayOfWeek.js +7 -6
  1184. package/dist/zoned/get/getZonedHour.d.ts +3 -2
  1185. package/dist/zoned/get/getZonedHour.js +7 -8
  1186. package/dist/zoned/get/getZonedMicrosecond.d.ts +3 -2
  1187. package/dist/zoned/get/getZonedMicrosecond.js +7 -6
  1188. package/dist/zoned/get/getZonedMillisecond.d.ts +3 -2
  1189. package/dist/zoned/get/getZonedMillisecond.js +7 -8
  1190. package/dist/zoned/get/getZonedMinute.d.ts +3 -2
  1191. package/dist/zoned/get/getZonedMinute.js +7 -8
  1192. package/dist/zoned/get/getZonedMonth.d.ts +3 -2
  1193. package/dist/zoned/get/getZonedMonth.js +7 -8
  1194. package/dist/zoned/get/getZonedNanosecond.d.ts +3 -2
  1195. package/dist/zoned/get/getZonedNanosecond.js +7 -6
  1196. package/dist/zoned/get/getZonedNow.d.ts +9 -5
  1197. package/dist/zoned/get/getZonedNow.js +9 -5
  1198. package/dist/zoned/get/getZonedNowUnit.d.ts +7 -4
  1199. package/dist/zoned/get/getZonedNowUnit.js +11 -8
  1200. package/dist/zoned/get/getZonedSecond.d.ts +3 -2
  1201. package/dist/zoned/get/getZonedSecond.js +7 -8
  1202. package/dist/zoned/get/getZonedToday.d.ts +3 -2
  1203. package/dist/zoned/get/getZonedToday.js +7 -6
  1204. package/dist/zoned/get/getZonedWeekOfYear.d.ts +3 -2
  1205. package/dist/zoned/get/getZonedWeekOfYear.js +7 -6
  1206. package/dist/zoned/get/getZonedYear.d.ts +5 -2
  1207. package/dist/zoned/get/getZonedYear.js +10 -8
  1208. package/dist/zoned/index.d.ts +2 -1
  1209. package/dist/zoned/index.js +3 -2
  1210. package/dist/zoned/interval/intervalAbutsZoned.d.ts +2 -2
  1211. package/dist/zoned/interval/intervalAbutsZoned.js +3 -3
  1212. package/dist/zoned/interval/intervalContainsZoned.d.ts +1 -1
  1213. package/dist/zoned/interval/intervalContainsZoned.js +2 -2
  1214. package/dist/zoned/interval/intervalCountZoned.d.ts +4 -4
  1215. package/dist/zoned/interval/intervalCountZoned.js +5 -5
  1216. package/dist/zoned/interval/intervalDifferenceZoned.js +1 -1
  1217. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +1 -1
  1218. package/dist/zoned/interval/intervalDivideEquallyZoned.js +2 -2
  1219. package/dist/zoned/interval/intervalEngulfsZoned.d.ts +1 -1
  1220. package/dist/zoned/interval/intervalEngulfsZoned.js +2 -2
  1221. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +6 -6
  1222. package/dist/zoned/interval/intervalFromDurationZoned.js +7 -7
  1223. package/dist/zoned/interval/intervalIntersectionZoned.js +1 -1
  1224. package/dist/zoned/interval/intervalLengthZoned.d.ts +5 -5
  1225. package/dist/zoned/interval/intervalLengthZoned.js +5 -5
  1226. package/dist/zoned/interval/intervalOverlappingDaysZoned.d.ts +2 -2
  1227. package/dist/zoned/interval/intervalOverlappingDaysZoned.js +3 -3
  1228. package/dist/zoned/interval/intervalSplitAtZoned.js +14 -16
  1229. package/dist/zoned/interval/intervalUnionZoned.js +1 -1
  1230. package/dist/zoned/interval/intervalXorAllZoned.js +3 -3
  1231. package/dist/zoned/interval/intervalXorZoned.js +1 -1
  1232. package/dist/zoned/interval/intervalsOverlapZoned.d.ts +2 -2
  1233. package/dist/zoned/interval/intervalsOverlapZoned.js +3 -3
  1234. package/dist/zoned/interval/mergeIntervalsZoned.js +3 -3
  1235. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +2 -1
  1236. package/dist/zoned/interval/splitIntervalByUnitZoned.js +3 -2
  1237. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.d.ts +2 -2
  1238. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.js +3 -3
  1239. package/dist/zoned/interval/validate/isValidZonedInterval.d.ts +1 -1
  1240. package/dist/zoned/interval/validate/isValidZonedInterval.js +2 -2
  1241. package/dist/zoned/map/mapZonedDatesInRange.js +1 -1
  1242. package/dist/zoned/map/mapZonedHoursInDay.d.ts +1 -1
  1243. package/dist/zoned/map/mapZonedHoursInDay.js +2 -2
  1244. package/dist/zoned/parse/getZonedOffset.d.ts +1 -1
  1245. package/dist/zoned/parse/getZonedOffset.js +1 -1
  1246. package/dist/zoned/parse/getZonedOffsetAs.d.ts +6 -6
  1247. package/dist/zoned/parse/getZonedOffsetAs.js +3 -3
  1248. package/dist/zoned/parse/parseDateTimeFromZoned.js +2 -2
  1249. package/dist/zoned/parse/parseRfc2822.js +1 -1
  1250. package/dist/zoned/parse/parseRfc3339.js +1 -1
  1251. package/dist/zoned/parse/parseUnitFromZoned.d.ts +5 -2
  1252. package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
  1253. package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
  1254. package/dist/zoned/parse/parseYearFromZoned.js +6 -3
  1255. package/dist/zoned/validate/hasDaylightSaving.d.ts +6 -4
  1256. package/dist/zoned/validate/hasDaylightSaving.js +16 -10
  1257. package/dist/zoned/validate/index.d.ts +2 -0
  1258. package/dist/zoned/validate/index.js +2 -0
  1259. package/dist/zoned/validate/isValidCalendarZonedDateTime.d.ts +8 -8
  1260. package/dist/zoned/validate/isValidCalendarZonedDateTime.js +8 -8
  1261. package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
  1262. package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
  1263. package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
  1264. package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
  1265. package/dist/zoned/validate/isValidTimeZone.d.ts +6 -2
  1266. package/dist/zoned/validate/isValidTimeZone.js +8 -19
  1267. package/dist/zoned/validate/isValidZonedDateTime.d.ts +7 -7
  1268. package/dist/zoned/validate/isValidZonedDateTime.js +9 -9
  1269. package/dist/zoned/validate/isValidZonedRange.d.ts +1 -1
  1270. package/dist/zoned/validate/isValidZonedRange.js +5 -5
  1271. package/package.json +103 -4
  1272. package/skills/gmt-arithmetic/SKILL.md +63 -17
  1273. package/skills/gmt-basics/SKILL.md +83 -21
  1274. package/skills/gmt-gnss/SKILL.md +92 -0
  1275. package/skills/gmt-integration/SKILL.md +58 -10
  1276. package/skills/gmt-intermodal/SKILL.md +189 -0
  1277. package/skills/gmt-timezone/SKILL.md +51 -169
  1278. package/skills/gmt-transport/SKILL.md +133 -0
  1279. package/skills/gmt-workforce/SKILL.md +84 -0
  1280. package/dist/internal/unixZonedDateTime.d.ts +0 -22
  1281. package/dist/internal/unixZonedDateTime.js +0 -32
  1282. package/dist/internal/utcZonedDateTime.d.ts +0 -19
  1283. package/dist/internal/utcZonedDateTime.js +0 -31
@@ -24,11 +24,11 @@ import type { BusinessCalendar } from "../../types/index.js";
24
24
  * @param calendar BusinessCalendar naming the weekend days and holidays
25
25
  * @returns number of working days in `(start, end]`, negative when `end` precedes `start`, or null on invalid input
26
26
  *
27
- * @example businessDaysBetween("2024-07-01", "2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // 3 — Tue, Wed, Fri
27
+ * @example businessDaysBetween("2024-07-01", "2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // 3 — Tue, Wed, Fri
28
28
  * @example businessDaysBetween("2024-07-05", "2024-07-08", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 1 — Monday, over the weekend
29
29
  * @example businessDaysBetween("2024-07-01", "2024-07-31", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 22 — July's 23 weekdays less the 1st
30
30
  * @example businessDaysBetween("2024-07-01", "2024-07-01", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 0
31
- * @example businessDaysBetween("2024-07-05", "2024-07-01", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // -3 — reversed
31
+ * @example businessDaysBetween("2024-07-05", "2024-07-01", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // -3 — reversed
32
32
  * @example businessDaysBetween("2024-07-06", "2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 0 — addBusinessDays("2024-07-06", -1) is "2024-07-05", but Saturday is excluded
33
33
  * @example businessDaysBetween("2024-07-01", "2024-07-08", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // 5 — Friday–Saturday weekend
34
34
  * @example businessDaysBetween("invalid", "2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // null
@@ -1,33 +1,7 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { parseBusinessCalendar } from "../../internal/businessCalendar.js";
1
+ import { Temporal } from "../../internal/temporal.js";
2
+ import { businessDaysWithin, parseBusinessCalendar, } from "../../internal/businessCalendar.js";
3
+ import { epochDayOfDate } from "../../internal/epochDay.js";
3
4
  import { isValidDate } from "../../plain/validate/index.js";
4
- const DAYS_PER_WEEK = 7;
5
- /**
6
- * Count the business days in `(from, to]`, given `from` is not after `to`.
7
- *
8
- * Whole weeks contribute one of each weekday, so only the remainder is walked and the count
9
- * costs the same for a range of days as for one of centuries.
10
- */
11
- function countBusinessDates(from, to, weekend, holidays) {
12
- const days = from.until(to, { largestUnit: "day" }).days;
13
- const wholeWeeks = Math.floor(days / DAYS_PER_WEEK);
14
- const businessDaysPerWeek = DAYS_PER_WEEK - weekend.size;
15
- let count = wholeWeeks * businessDaysPerWeek;
16
- for (let offset = wholeWeeks * DAYS_PER_WEEK + 1; offset <= days; offset++) {
17
- if (!weekend.has(from.add({ days: offset }).dayOfWeek)) {
18
- count += 1;
19
- }
20
- }
21
- for (const holiday of holidays) {
22
- const date = Temporal.PlainDate.from(holiday);
23
- const insideRange = Temporal.PlainDate.compare(date, from) > 0 &&
24
- Temporal.PlainDate.compare(date, to) <= 0;
25
- if (insideRange && !weekend.has(date.dayOfWeek)) {
26
- count -= 1;
27
- }
28
- }
29
- return count;
30
- }
31
5
  /**
32
6
  * Count the working days between two local dates, **excluding `start` and including `end`**.
33
7
  *
@@ -53,11 +27,11 @@ function countBusinessDates(from, to, weekend, holidays) {
53
27
  * @param calendar BusinessCalendar naming the weekend days and holidays
54
28
  * @returns number of working days in `(start, end]`, negative when `end` precedes `start`, or null on invalid input
55
29
  *
56
- * @example businessDaysBetween("2024-07-01", "2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // 3 — Tue, Wed, Fri
30
+ * @example businessDaysBetween("2024-07-01", "2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // 3 — Tue, Wed, Fri
57
31
  * @example businessDaysBetween("2024-07-05", "2024-07-08", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 1 — Monday, over the weekend
58
32
  * @example businessDaysBetween("2024-07-01", "2024-07-31", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 22 — July's 23 weekdays less the 1st
59
33
  * @example businessDaysBetween("2024-07-01", "2024-07-01", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 0
60
- * @example businessDaysBetween("2024-07-05", "2024-07-01", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // -3 — reversed
34
+ * @example businessDaysBetween("2024-07-05", "2024-07-01", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // -3 — reversed
61
35
  * @example businessDaysBetween("2024-07-06", "2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // 0 — addBusinessDays("2024-07-06", -1) is "2024-07-05", but Saturday is excluded
62
36
  * @example businessDaysBetween("2024-07-01", "2024-07-08", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // 5 — Friday–Saturday weekend
63
37
  * @example businessDaysBetween("invalid", "2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // null
@@ -70,10 +44,12 @@ export function businessDaysBetween(start, end, calendar) {
70
44
  return null;
71
45
  }
72
46
  try {
73
- const startDate = Temporal.PlainDate.from(start);
74
- const endDate = Temporal.PlainDate.from(end);
75
- const reversed = Temporal.PlainDate.compare(startDate, endDate) > 0;
76
- const count = countBusinessDates(reversed ? endDate : startDate, reversed ? startDate : endDate, resolved.weekend, resolved.holidays);
47
+ const startDay = epochDayOfDate(Temporal.PlainDate.from(start));
48
+ const endDay = epochDayOfDate(Temporal.PlainDate.from(end));
49
+ const reversed = startDay > endDay;
50
+ const count = reversed
51
+ ? businessDaysWithin(endDay + 1, startDay, resolved)
52
+ : businessDaysWithin(startDay + 1, endDay, resolved);
77
53
  // `0 - count` rather than `-count`: an empty reversed range must be 0, not -0.
78
54
  return reversed ? 0 - count : count;
79
55
  }
@@ -23,7 +23,7 @@ import type { BusinessCalendar } from "../../types/index.js";
23
23
  * @param calendars array of BusinessCalendar records to compose
24
24
  * @returns merged BusinessCalendar, or null on invalid input
25
25
  *
26
- * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }, { weekend: [6, 7], holidays: ["2024-05-06"], timeZone: "Europe/London" }]) // { weekend: [6, 7], holidays: ["2024-05-06", "2024-07-04"], timeZone: "America/New_York" }
26
+ * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }, { weekend: [6, 7], holidays: ["2024-05-06"], timeZone: "Europe/London" }]) // { weekend: [6, 7], holidays: ["2024-05-06", "2024-07-04"], timeZone: "Africa/Kigali" }
27
27
  * @example mergeCalendars([{ weekend: [6, 7], holidays: [], timeZone: "UTC" }, { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }]) // { weekend: [5, 6, 7], holidays: [], timeZone: "UTC" } — only Sunday to Thursday survive
28
28
  * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "UTC" }]) // { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "UTC" }
29
29
  * @example mergeCalendars([]) // null
@@ -1,5 +1,5 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
1
  import { parseBusinessCalendar } from "../../internal/businessCalendar.js";
2
+ import { isoDateString, sortedUnique } from "../../internal/epochDay.js";
3
3
  /**
4
4
  * Compose several jurisdictions' calendars into one whose working days are those they all
5
5
  * share.
@@ -24,7 +24,7 @@ import { parseBusinessCalendar } from "../../internal/businessCalendar.js";
24
24
  * @param calendars array of BusinessCalendar records to compose
25
25
  * @returns merged BusinessCalendar, or null on invalid input
26
26
  *
27
- * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }, { weekend: [6, 7], holidays: ["2024-05-06"], timeZone: "Europe/London" }]) // { weekend: [6, 7], holidays: ["2024-05-06", "2024-07-04"], timeZone: "America/New_York" }
27
+ * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }, { weekend: [6, 7], holidays: ["2024-05-06"], timeZone: "Europe/London" }]) // { weekend: [6, 7], holidays: ["2024-05-06", "2024-07-04"], timeZone: "Africa/Kigali" }
28
28
  * @example mergeCalendars([{ weekend: [6, 7], holidays: [], timeZone: "UTC" }, { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }]) // { weekend: [5, 6, 7], holidays: [], timeZone: "UTC" } — only Sunday to Thursday survive
29
29
  * @example mergeCalendars([{ weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "UTC" }]) // { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "UTC" }
30
30
  * @example mergeCalendars([]) // null
@@ -37,7 +37,7 @@ export function mergeCalendars(calendars) {
37
37
  return null;
38
38
  }
39
39
  const weekend = new Set();
40
- const holidays = new Set();
40
+ const holidayLists = [];
41
41
  for (const calendar of calendars) {
42
42
  const resolved = parseBusinessCalendar(calendar);
43
43
  if (resolved === null) {
@@ -46,15 +46,14 @@ export function mergeCalendars(calendars) {
46
46
  for (const day of resolved.weekend) {
47
47
  weekend.add(day);
48
48
  }
49
- for (const holiday of resolved.holidays) {
50
- holidays.add(holiday);
51
- }
49
+ holidayLists.push(resolved.holidays);
52
50
  }
51
+ const holidays = sortedUnique(Int32Array.from(holidayLists.flatMap((list) => Array.from(list))));
53
52
  const merged = {
54
53
  weekend: [...weekend].sort((a, b) => a - b),
55
- // Chronological, not lexicographic: a bare `.sort()` compares as strings, which puts the
56
- // "+" and "-" of an expanded year below every digit.
57
- holidays: [...holidays].sort((a, b) => Temporal.PlainDate.compare(a, b)),
54
+ // Epoch days sort chronologically, which a string sort would not: it puts the "+" and "-"
55
+ // of an expanded year below every digit.
56
+ holidays: Array.from(holidays, (day) => isoDateString(day)),
58
57
  timeZone: calendars[0].timeZone,
59
58
  };
60
59
  // The union can close every weekday even when no input does, which is not a calendar.
@@ -20,8 +20,8 @@ import type { BusinessCalendar } from "../../types/index.js";
20
20
  * @param calendar BusinessCalendar naming the weekend days and holidays
21
21
  * @returns ISO PlainDate string of the next working day, or "" on invalid input
22
22
  *
23
- * @example nextBusinessDay("2024-07-03", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-05" — skips the holiday
24
- * @example nextBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-05" — from the holiday itself
23
+ * @example nextBusinessDay("2024-07-03", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-05" — skips the holiday
24
+ * @example nextBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-05" — from the holiday itself
25
25
  * @example nextBusinessDay("2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-07-08" — Friday over the weekend
26
26
  * @example nextBusinessDay("2024-07-04", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // "2024-07-07" — Friday–Saturday weekend
27
27
  * @example nextBusinessDay("invalid", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // ""
@@ -20,8 +20,8 @@ import { neighbourBusinessDayValue } from "../../internal/businessDayValues.js";
20
20
  * @param calendar BusinessCalendar naming the weekend days and holidays
21
21
  * @returns ISO PlainDate string of the next working day, or "" on invalid input
22
22
  *
23
- * @example nextBusinessDay("2024-07-03", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-05" — skips the holiday
24
- * @example nextBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-05" — from the holiday itself
23
+ * @example nextBusinessDay("2024-07-03", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-05" — skips the holiday
24
+ * @example nextBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-05" — from the holiday itself
25
25
  * @example nextBusinessDay("2024-07-05", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-07-08" — Friday over the weekend
26
26
  * @example nextBusinessDay("2024-07-04", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // "2024-07-07" — Friday–Saturday weekend
27
27
  * @example nextBusinessDay("invalid", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // ""
@@ -20,8 +20,8 @@ import type { BusinessCalendar } from "../../types/index.js";
20
20
  * @param calendar BusinessCalendar naming the weekend days and holidays
21
21
  * @returns ISO PlainDate string of the previous working day, or "" on invalid input
22
22
  *
23
- * @example previousBusinessDay("2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-03" — skips the holiday
24
- * @example previousBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-03" — from the holiday itself
23
+ * @example previousBusinessDay("2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-03" — skips the holiday
24
+ * @example previousBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-03" — from the holiday itself
25
25
  * @example previousBusinessDay("2024-07-08", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-07-05" — Monday back over the weekend
26
26
  * @example previousBusinessDay("2024-07-07", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // "2024-07-04" — Friday–Saturday weekend
27
27
  * @example previousBusinessDay("invalid", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // ""
@@ -20,8 +20,8 @@ import { neighbourBusinessDayValue } from "../../internal/businessDayValues.js";
20
20
  * @param calendar BusinessCalendar naming the weekend days and holidays
21
21
  * @returns ISO PlainDate string of the previous working day, or "" on invalid input
22
22
  *
23
- * @example previousBusinessDay("2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-03" — skips the holiday
24
- * @example previousBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "America/New_York" }) // "2024-07-03" — from the holiday itself
23
+ * @example previousBusinessDay("2024-07-05", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-03" — skips the holiday
24
+ * @example previousBusinessDay("2024-07-04", { weekend: [6, 7], holidays: ["2024-07-04"], timeZone: "Africa/Kigali" }) // "2024-07-03" — from the holiday itself
25
25
  * @example previousBusinessDay("2024-07-08", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-07-05" — Monday back over the weekend
26
26
  * @example previousBusinessDay("2024-07-07", { weekend: [5, 6], holidays: [], timeZone: "Asia/Riyadh" }) // "2024-07-04" — Friday–Saturday weekend
27
27
  * @example previousBusinessDay("invalid", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // ""
@@ -46,9 +46,9 @@ import type { BusinessCalendar, RollConvention } from "../../types/index.js";
46
46
  * @param calendar BusinessCalendar naming the weekend days and holidays
47
47
  * @returns ISO PlainDate string of the rolled date, or "" on invalid input
48
48
  *
49
- * @example rollDate("2024-05-31", "following", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-06-03"
50
- * @example rollDate("2024-05-31", "modifiedFollowing", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-05-30" — forward would leave May
51
- * @example rollDate("2024-06-01", "modifiedPreceding", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-06-03" — backward would leave June
49
+ * @example rollDate("2024-05-31", "following", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-06-03"
50
+ * @example rollDate("2024-05-31", "modifiedFollowing", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-05-30" — forward would leave May
51
+ * @example rollDate("2024-06-01", "modifiedPreceding", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-06-03" — backward would leave June
52
52
  * @example rollDate("2024-05-29", "following", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-05-29" — already a working day
53
53
  * @example rollDate("2024-03-15", "endOfMonth", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-03-29" — March ends on a Sunday
54
54
  * @example rollDate("2024-06-01", "none", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-06-01" — a Saturday, unadjusted
@@ -1,40 +1,7 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { businessDateFrom, parseBusinessCalendar, } from "../../internal/businessCalendar.js";
3
- import { isValidDate } from "../../plain/validate/index.js";
4
- import { isValidRollConvention } from "../validate/index.js";
5
- function sameMonth(a, b) {
6
- return a.year === b.year && a.month === b.month;
7
- }
8
- /**
9
- * Roll in `direction`, and if that leaves the date's month, roll the other way instead.
10
- */
11
- function modifiedRoll(date, direction, calendar) {
12
- const rolled = businessDateFrom(date, direction, calendar);
13
- // An exhausted walk is a sentinel, not a "left the month" answer: turning round here would
14
- // report the opposite direction's date as though the first walk had succeeded.
15
- if (rolled === null) {
16
- return null;
17
- }
18
- return sameMonth(rolled, date)
19
- ? rolled
20
- : businessDateFrom(date, direction === 1 ? -1 : 1, calendar);
21
- }
22
- function rollTo(date, convention, calendar) {
23
- switch (convention) {
24
- case "following":
25
- return businessDateFrom(date, 1, calendar);
26
- case "preceding":
27
- return businessDateFrom(date, -1, calendar);
28
- case "modifiedFollowing":
29
- return modifiedRoll(date, 1, calendar);
30
- case "modifiedPreceding":
31
- return modifiedRoll(date, -1, calendar);
32
- case "endOfMonth":
33
- return businessDateFrom(date.with({ day: date.daysInMonth }), -1, calendar);
34
- case "none":
35
- return date;
36
- }
37
- }
1
+ import { Temporal } from "../../internal/temporal.js";
2
+ import { parseBusinessCalendar } from "../../internal/businessCalendar.js";
3
+ import { rollBusinessDate } from "../../internal/rollBusinessDate.js";
4
+ import { isDateString, isRollConventionName } from "../../internal/inputChecks.js";
38
5
  /**
39
6
  * Move a local date onto a working day according to `convention`.
40
7
  *
@@ -82,9 +49,9 @@ function rollTo(date, convention, calendar) {
82
49
  * @param calendar BusinessCalendar naming the weekend days and holidays
83
50
  * @returns ISO PlainDate string of the rolled date, or "" on invalid input
84
51
  *
85
- * @example rollDate("2024-05-31", "following", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-06-03"
86
- * @example rollDate("2024-05-31", "modifiedFollowing", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-05-30" — forward would leave May
87
- * @example rollDate("2024-06-01", "modifiedPreceding", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "America/New_York" }) // "2024-06-03" — backward would leave June
52
+ * @example rollDate("2024-05-31", "following", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-06-03"
53
+ * @example rollDate("2024-05-31", "modifiedFollowing", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-05-30" — forward would leave May
54
+ * @example rollDate("2024-06-01", "modifiedPreceding", { weekend: [6, 7], holidays: ["2024-05-31"], timeZone: "Europe/London" }) // "2024-06-03" — backward would leave June
88
55
  * @example rollDate("2024-05-29", "following", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-05-29" — already a working day
89
56
  * @example rollDate("2024-03-15", "endOfMonth", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-03-29" — March ends on a Sunday
90
57
  * @example rollDate("2024-06-01", "none", { weekend: [6, 7], holidays: [], timeZone: "UTC" }) // "2024-06-01" — a Saturday, unadjusted
@@ -95,13 +62,13 @@ function rollTo(date, convention, calendar) {
95
62
  export function rollDate(value, convention, calendar) {
96
63
  try {
97
64
  const resolved = parseBusinessCalendar(calendar);
98
- if (!isValidDate(value) ||
99
- !isValidRollConvention(convention) ||
65
+ if (!isDateString(value) ||
66
+ !isRollConventionName(convention) ||
100
67
  resolved === null) {
101
68
  return "";
102
69
  }
103
70
  try {
104
- const rolled = rollTo(Temporal.PlainDate.from(value), convention, resolved);
71
+ const rolled = rollBusinessDate(Temporal.PlainDate.from(value), convention, resolved);
105
72
  return rolled === null ? "" : rolled.toString();
106
73
  }
107
74
  catch {
@@ -1,10 +1,10 @@
1
- import { Temporal } from "@js-temporal/polyfill";
1
+ import { Temporal } from "../../internal/temporal.js";
2
2
  import type { ZoneBucketUnit } from "../../types/index.js";
3
3
  /**
4
4
  * Return the start instant of every `unit` bucket the half-open range `[start, end)` touches,
5
5
  * bucketed **in `timeZone`**.
6
6
  *
7
- * This is "group by day in `America/New_York`" over UTC timestamps, done correctly. Buckets
7
+ * This is "group by day in `Europe/London`" over UTC timestamps, done correctly. Buckets
8
8
  * are not uniform in length and that is the point: a day that springs forward is 23 hours and
9
9
  * one that falls back is 25, so a daily aggregate built on a fixed 24 hours drifts an hour
10
10
  * twice a year, and a container's chargeable days — counted in terminal-local calendar days —
@@ -29,21 +29,29 @@ import type { ZoneBucketUnit } from "../../types/index.js";
29
29
  * if a zone ever presented more transitions inside one bucket than the stepper walks — no
30
30
  * IANA zone does, and the whole table was swept to confirm it. A truncated list would be
31
31
  * worse than the sentinel, so none is returned in any of those cases.
32
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
33
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
34
+ * offset's seconds (under a minute) of the last instant Temporal supports
35
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
36
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `[]`. An offset to the minute has no
37
+ * such limit.
32
38
  *
33
39
  * @param start ISO 8601 instant string for the range start (inclusive)
34
40
  * @param end ISO 8601 instant string for the range end (exclusive)
35
- * @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
36
- * @param timeZone IANA name or UTC offset the buckets are computed in
41
+ * @param unit bucket unit ("month" | "week" | "day" | "hour", or its plural)
42
+ * @param timeZone IANA name or UTC offset the buckets are computed in: a time zone identifier
43
+ * (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
37
44
  * @returns array of UTC instant strings ending in "Z", or [] on invalid input
38
45
  *
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"]
40
- * @example bucketRange("2024-03-09T05:00:00Z", "2024-03-12T04:00:00Z", "day", "America/New_York") // ["2024-03-09T05:00:00Z", "2024-03-10T05:00:00Z", "2024-03-11T04:00:00Z"] (the middle day is 23 hours)
41
- * @example bucketRange("2024-11-02T04:00:00Z", "2024-11-05T05:00:00Z", "day", "America/New_York") // ["2024-11-02T04:00:00Z", "2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z"] (the middle day is 25 hours)
42
- * @example bucketRange("2024-11-03T04:00:00Z", "2024-11-03T08:00:00Z", "hour", "America/New_York") // ["2024-11-03T04:00:00Z", "2024-11-03T05:00:00Z", "2024-11-03T06:00:00Z", "2024-11-03T07:00:00Z"] (the repeated 01:00 is its own bucket)
43
- * @example bucketRange("2024-06-14T04:00:00Z", "2024-06-14T04:00:00Z", "day", "America/New_York") // [] (zero length, on a boundary)
44
- * @example bucketRange("+275760-09-12T23:00:00Z", "+275760-09-13T00:00:00Z", "day", "America/New_York") // ["+275760-09-12T04:00:00Z"] (the next day would start past the last instant; this one is still returned)
46
+ * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "Asia/Kolkata") // ["2024-06-14T18:30:00Z", "2024-06-15T18:30:00Z", "2024-06-16T18:30:00Z"]
47
+ * @example bucketRange("2024-03-30T00:00:00Z", "2024-04-01T23:00:00Z", "day", "Europe/London") // ["2024-03-30T00:00:00Z", "2024-03-31T00:00:00Z", "2024-03-31T23:00:00Z"] (the middle day is 23 hours)
48
+ * @example bucketRange("2024-04-05T13:00:00Z", "2024-04-08T14:00:00Z", "day", "Australia/Sydney") // ["2024-04-05T13:00:00Z", "2024-04-06T13:00:00Z", "2024-04-07T14:00:00Z"] (the middle day is 25 hours)
49
+ * @example bucketRange("2024-04-06T14:00:00Z", "2024-04-06T18:00:00Z", "hour", "Australia/Sydney") // ["2024-04-06T14:00:00Z", "2024-04-06T15:00:00Z", "2024-04-06T16:00:00Z", "2024-04-06T17:00:00Z"] (the repeated 02:00 is its own bucket)
50
+ * @example bucketRange("2024-06-14T15:00:00Z", "2024-06-14T15:00:00Z", "day", "Asia/Tokyo") // [] (zero length, on a boundary)
51
+ * @example bucketRange("+275760-09-12T23:00:00Z", "+275760-09-13T00:00:00Z", "day", "America/Sao_Paulo") // ["+275760-09-12T03:00:00Z"] (the next day would start past the last instant; this one is still returned)
45
52
  * @example bucketRange("2024-06-16T00:00:00Z", "2024-06-15T00:00:00Z", "day", "UTC") // [] (start after end)
46
- * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "days", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"] (plural unit name)
53
+ * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "days", "Asia/Tokyo") // ["2024-06-14T15:00:00Z", "2024-06-15T15:00:00Z", "2024-06-16T15:00:00Z"] (plural unit name)
47
54
  * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "year", "UTC") // [] (not a bucketing unit)
55
+ * @example bucketRange("1970-01-01T00:00:00Z", "1970-01-02T01:00:00Z", "day", "-00:44:30") // ["1969-12-31T00:44:30Z", "1970-01-01T00:44:30Z", "1970-01-02T00:44:30Z"]
48
56
  */
49
57
  export declare function bucketRange(start: string, end: string, unit: Temporal.SmallestUnit<ZoneBucketUnit>, timeZone: string): string[];
@@ -1,9 +1,9 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { instantFrom, nextZonedBucketStart, zonedNextTransition, zonedUnitStart, } from "../../internal/index.js";
1
+ import { Temporal } from "../../internal/temporal.js";
2
+ import { frameInstant, frameZoned, instantFrom, nextZonedBucketStart, zonedUnitStart, zoneFrame, } from "../../internal/index.js";
3
3
  import { isValidInstant } from "../../precision/validate/index.js";
4
- import { isValidTimeZone } from "../../zoned/validate/index.js";
5
4
  import { isValidZoneBucketUnit } from "../validate/index.js";
6
5
  import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
6
+ import { certainlyTouchesMoreBuckets } from "../../internal/zoneBucketCap.js";
7
7
  /**
8
8
  * Buckets a single call will return before giving up.
9
9
  *
@@ -12,58 +12,6 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
12
12
  * months — past anything a caller renders or aggregates in one pass.
13
13
  */
14
14
  const MAX_BUCKETS = 10_000;
15
- const NANOSECONDS_PER_HOUR = 3600000000000n;
16
- /**
17
- * The longest wall-clock stretch of each unit. Any wall-clock interval this long holds a unit
18
- * start: an hour holds an hour start, 24 hours a midnight, 7 days a Monday, 31 days a first of
19
- * the month.
20
- */
21
- const LONGEST_UNIT_NANOSECONDS = {
22
- hour: NANOSECONDS_PER_HOUR,
23
- day: 24n * NANOSECONDS_PER_HOUR,
24
- week: 168n * NANOSECONDS_PER_HOUR,
25
- month: 744n * NANOSECONDS_PER_HOUR,
26
- };
27
- /** Offset transitions read before the pre-count gives up and leaves the answer to the walk. */
28
- const MAX_PRECOUNT_TRANSITIONS = 4_096;
29
- /**
30
- * True when `[start, end)` certainly touches more than `MAX_BUCKETS` buckets, decided from the span
31
- * instead of stepping bucket by bucket (which costs milliseconds a step in some zones).
32
- *
33
- * Over a prefix of the range, the local wall clock runs continuously between offset transitions.
34
- * Those stretches cover at least the prefix's length less every backward offset change, in at most
35
- * one stretch more than there are transitions, and each stretch of wall clock holds at least
36
- * `floor(length / LONGEST_UNIT_NANOSECONDS)` distinct unit starts, each the start of its own
37
- * bucket before `end`. The count subtracts two per stretch for the partial units at its ends.
38
- * `false` means "not certain": the walk decides, exactly as before.
39
- */
40
- function certainlyExceedsBucketCap(startZoned, endZoned, unit) {
41
- const unitNs = LONGEST_UNIT_NANOSECONDS[unit];
42
- const startNs = startZoned.epochNanoseconds;
43
- const prefixEndNs = [
44
- endZoned.epochNanoseconds,
45
- startNs + 2n * BigInt(MAX_BUCKETS + 1) * unitNs,
46
- ].reduce((a, b) => (a < b ? a : b));
47
- if (prefixEndNs - startNs <= BigInt(MAX_BUCKETS) * unitNs) {
48
- return false;
49
- }
50
- let backwardNs = 0n;
51
- let transitions = 0;
52
- try {
53
- for (let current = startZoned, next = zonedNextTransition(current); next !== null && next.epochNanoseconds < prefixEndNs; current = next, next = zonedNextTransition(current)) {
54
- if (++transitions > MAX_PRECOUNT_TRANSITIONS) {
55
- return false;
56
- }
57
- const shift = BigInt(current.offsetNanoseconds - next.offsetNanoseconds);
58
- backwardNs += shift > 0n ? shift : 0n;
59
- }
60
- }
61
- catch {
62
- return false;
63
- }
64
- const wallStarts = (prefixEndNs - startNs - backwardNs) / unitNs;
65
- return wallStarts - 2n * BigInt(transitions + 1) > BigInt(MAX_BUCKETS);
66
- }
67
15
  /**
68
16
  * The bucket start after `current`: `undefined` when it lies past Temporal's last representable
69
17
  * instant, null when the stepper cannot find it.
@@ -82,7 +30,7 @@ function nextBucketStartWithinRange(current, unit) {
82
30
  * Return the start instant of every `unit` bucket the half-open range `[start, end)` touches,
83
31
  * bucketed **in `timeZone`**.
84
32
  *
85
- * This is "group by day in `America/New_York`" over UTC timestamps, done correctly. Buckets
33
+ * This is "group by day in `Europe/London`" over UTC timestamps, done correctly. Buckets
86
34
  * are not uniform in length and that is the point: a day that springs forward is 23 hours and
87
35
  * one that falls back is 25, so a daily aggregate built on a fixed 24 hours drifts an hour
88
36
  * twice a year, and a container's chargeable days — counted in terminal-local calendar days —
@@ -107,38 +55,47 @@ function nextBucketStartWithinRange(current, unit) {
107
55
  * if a zone ever presented more transitions inside one bucket than the stepper walks — no
108
56
  * IANA zone does, and the whole table was swept to confirm it. A truncated list would be
109
57
  * worse than the sentinel, so none is returned in any of those cases.
58
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
59
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
60
+ * offset's seconds (under a minute) of the last instant Temporal supports
61
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
62
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `[]`. An offset to the minute has no
63
+ * such limit.
110
64
  *
111
65
  * @param start ISO 8601 instant string for the range start (inclusive)
112
66
  * @param end ISO 8601 instant string for the range end (exclusive)
113
- * @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
114
- * @param timeZone IANA name or UTC offset the buckets are computed in
67
+ * @param unit bucket unit ("month" | "week" | "day" | "hour", or its plural)
68
+ * @param timeZone IANA name or UTC offset the buckets are computed in: a time zone identifier
69
+ * (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
115
70
  * @returns array of UTC instant strings ending in "Z", or [] on invalid input
116
71
  *
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"]
118
- * @example bucketRange("2024-03-09T05:00:00Z", "2024-03-12T04:00:00Z", "day", "America/New_York") // ["2024-03-09T05:00:00Z", "2024-03-10T05:00:00Z", "2024-03-11T04:00:00Z"] (the middle day is 23 hours)
119
- * @example bucketRange("2024-11-02T04:00:00Z", "2024-11-05T05:00:00Z", "day", "America/New_York") // ["2024-11-02T04:00:00Z", "2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z"] (the middle day is 25 hours)
120
- * @example bucketRange("2024-11-03T04:00:00Z", "2024-11-03T08:00:00Z", "hour", "America/New_York") // ["2024-11-03T04:00:00Z", "2024-11-03T05:00:00Z", "2024-11-03T06:00:00Z", "2024-11-03T07:00:00Z"] (the repeated 01:00 is its own bucket)
121
- * @example bucketRange("2024-06-14T04:00:00Z", "2024-06-14T04:00:00Z", "day", "America/New_York") // [] (zero length, on a boundary)
122
- * @example bucketRange("+275760-09-12T23:00:00Z", "+275760-09-13T00:00:00Z", "day", "America/New_York") // ["+275760-09-12T04:00:00Z"] (the next day would start past the last instant; this one is still returned)
72
+ * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "Asia/Kolkata") // ["2024-06-14T18:30:00Z", "2024-06-15T18:30:00Z", "2024-06-16T18:30:00Z"]
73
+ * @example bucketRange("2024-03-30T00:00:00Z", "2024-04-01T23:00:00Z", "day", "Europe/London") // ["2024-03-30T00:00:00Z", "2024-03-31T00:00:00Z", "2024-03-31T23:00:00Z"] (the middle day is 23 hours)
74
+ * @example bucketRange("2024-04-05T13:00:00Z", "2024-04-08T14:00:00Z", "day", "Australia/Sydney") // ["2024-04-05T13:00:00Z", "2024-04-06T13:00:00Z", "2024-04-07T14:00:00Z"] (the middle day is 25 hours)
75
+ * @example bucketRange("2024-04-06T14:00:00Z", "2024-04-06T18:00:00Z", "hour", "Australia/Sydney") // ["2024-04-06T14:00:00Z", "2024-04-06T15:00:00Z", "2024-04-06T16:00:00Z", "2024-04-06T17:00:00Z"] (the repeated 02:00 is its own bucket)
76
+ * @example bucketRange("2024-06-14T15:00:00Z", "2024-06-14T15:00:00Z", "day", "Asia/Tokyo") // [] (zero length, on a boundary)
77
+ * @example bucketRange("+275760-09-12T23:00:00Z", "+275760-09-13T00:00:00Z", "day", "America/Sao_Paulo") // ["+275760-09-12T03:00:00Z"] (the next day would start past the last instant; this one is still returned)
123
78
  * @example bucketRange("2024-06-16T00:00:00Z", "2024-06-15T00:00:00Z", "day", "UTC") // [] (start after end)
124
- * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "days", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"] (plural unit name)
79
+ * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "days", "Asia/Tokyo") // ["2024-06-14T15:00:00Z", "2024-06-15T15:00:00Z", "2024-06-16T15:00:00Z"] (plural unit name)
125
80
  * @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "year", "UTC") // [] (not a bucketing unit)
81
+ * @example bucketRange("1970-01-01T00:00:00Z", "1970-01-02T01:00:00Z", "day", "-00:44:30") // ["1969-12-31T00:44:30Z", "1970-01-01T00:44:30Z", "1970-01-02T00:44:30Z"]
126
82
  */
127
83
  export function bucketRange(start, end, unit, timeZone) {
128
84
  // The singular name; the guard below rejects anything outside the four units.
129
85
  const resolvedUnit = resolveDateTimeUnit(unit);
86
+ const frame = zoneFrame(timeZone);
130
87
  if (!isValidInstant(start) ||
131
88
  !isValidInstant(end) ||
132
89
  !isValidZoneBucketUnit(resolvedUnit) ||
133
- !isValidTimeZone(timeZone)) {
90
+ frame === null) {
134
91
  return [];
135
92
  }
136
93
  try {
137
- const startZoned = instantFrom(start).toZonedDateTimeISO(timeZone);
138
- const endZoned = instantFrom(end).toZonedDateTimeISO(timeZone);
94
+ const startZoned = frameZoned(instantFrom(start), frame);
95
+ const endZoned = frameZoned(instantFrom(end), frame);
139
96
  if (Temporal.ZonedDateTime.compare(startZoned, endZoned) > 0)
140
97
  return [];
141
- if (certainlyExceedsBucketCap(startZoned, endZoned, resolvedUnit))
98
+ if (certainlyTouchesMoreBuckets(startZoned, endZoned, resolvedUnit, MAX_BUCKETS))
142
99
  return [];
143
100
  const boundaries = [];
144
101
  const first = zonedUnitStart(startZoned, resolvedUnit);
@@ -149,7 +106,7 @@ export function bucketRange(start, end, unit, timeZone) {
149
106
  if (Temporal.ZonedDateTime.compare(current, endZoned) >= 0) {
150
107
  return boundaries;
151
108
  }
152
- boundaries.push(current.toInstant().toString());
109
+ boundaries.push(frameInstant(current, frame).toString());
153
110
  const next = nextBucketStartWithinRange(current, resolvedUnit);
154
111
  // Past the last representable instant, so after `end`: every touched bucket is collected.
155
112
  if (next === undefined)
@@ -1,4 +1,4 @@
1
- import type { Temporal } from "@js-temporal/polyfill";
1
+ import type { Temporal } from "../../internal/temporal.js";
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
@@ -24,21 +24,29 @@ import type { ZoneBucketUnit } from "../../types/index.js";
24
24
  * - Returns a UTC instant string ending in `"Z"`, exactly — no rounding.
25
25
  * - Returns `""` on invalid input, and where the boundary itself is not representable — the
26
26
  * week or month containing the first instant Temporal supports began before it.
27
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
28
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
29
+ * offset's seconds (under a minute) of the last instant Temporal supports
30
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
31
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
32
+ * such limit.
27
33
  *
28
34
  * @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
29
- * @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
30
- * @param timeZone IANA name or UTC offset the boundary is computed in
35
+ * @param unit boundary unit ("month" | "week" | "day" | "hour", or its plural)
36
+ * @param timeZone IANA name or UTC offset the boundary is computed in: a time zone identifier
37
+ * (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
31
38
  * @returns UTC instant string ending in "Z", or "" on invalid input
32
39
  *
33
40
  * @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)
34
41
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "UTC") // "2024-06-15T00:00:00Z" (the same instant, a different local day)
35
42
  * @example floorToZone("2024-06-15T03:00:00Z", "hour", "Asia/Kathmandu") // "2024-06-15T02:15:00Z" (a +05:45 zone's hour boundary)
36
- * @example floorToZone("2024-06-15T03:00:00Z", "week", "America/New_York") // "2024-06-10T04:00:00Z" (the Monday)
43
+ * @example floorToZone("2024-06-15T03:00:00Z", "week", "Asia/Tokyo") // "2024-06-09T15:00:00Z" (the Monday)
37
44
  * @example floorToZone("2024-09-08T10:00:00Z", "day", "America/Santiago") // "2024-09-08T04:00:00Z" (local midnight is skipped, so the day starts at 01:00)
38
45
  * @example floorToZone("2024-05-15T10:20:30.123Z", "days", "Europe/Berlin") // "2024-05-14T22:00:00Z" (plural unit name)
39
46
  * @example floorToZone("2024-06-15T03:00:00Z", "year", "UTC") // "" (not a bucketing unit)
40
47
  * @example floorToZone("2024-06-15T03:00:00", "day", "UTC") // "" (zoneless, so it names no instant)
41
48
  * @example floorToZone("-271821-04-20T00:00:00Z", "month", "UTC") // "" (that month began before Temporal's range does)
42
49
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "Invalid/Zone") // ""
50
+ * @example floorToZone("1970-01-01T13:00:00Z", "day", "-00:44:30") // "1970-01-01T00:44:30Z" (local midnight at a stored offset with seconds)
43
51
  */
44
52
  export declare function floorToZone(value: string, unit: Temporal.SmallestUnit<ZoneBucketUnit>, timeZone: string): string;
@@ -1,6 +1,5 @@
1
- import { instantFrom, zonedUnitStart } from "../../internal/index.js";
1
+ import { frameInstant, frameZoned, instantFrom, zonedUnitStart, zoneFrame, } from "../../internal/index.js";
2
2
  import { isValidInstant } from "../../precision/validate/index.js";
3
- import { isValidTimeZone } from "../../zoned/validate/index.js";
4
3
  import { isValidZoneBucketUnit } from "../validate/index.js";
5
4
  import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
6
5
  /**
@@ -27,35 +26,44 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
27
26
  * - Returns a UTC instant string ending in `"Z"`, exactly — no rounding.
28
27
  * - Returns `""` on invalid input, and where the boundary itself is not representable — the
29
28
  * week or month containing the first instant Temporal supports began before it.
29
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
30
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
31
+ * offset's seconds (under a minute) of the last instant Temporal supports
32
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
33
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
34
+ * such limit.
30
35
  *
31
36
  * @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
32
- * @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
33
- * @param timeZone IANA name or UTC offset the boundary is computed in
37
+ * @param unit boundary unit ("month" | "week" | "day" | "hour", or its plural)
38
+ * @param timeZone IANA name or UTC offset the boundary is computed in: a time zone identifier
39
+ * (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
34
40
  * @returns UTC instant string ending in "Z", or "" on invalid input
35
41
  *
36
42
  * @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)
37
43
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "UTC") // "2024-06-15T00:00:00Z" (the same instant, a different local day)
38
44
  * @example floorToZone("2024-06-15T03:00:00Z", "hour", "Asia/Kathmandu") // "2024-06-15T02:15:00Z" (a +05:45 zone's hour boundary)
39
- * @example floorToZone("2024-06-15T03:00:00Z", "week", "America/New_York") // "2024-06-10T04:00:00Z" (the Monday)
45
+ * @example floorToZone("2024-06-15T03:00:00Z", "week", "Asia/Tokyo") // "2024-06-09T15:00:00Z" (the Monday)
40
46
  * @example floorToZone("2024-09-08T10:00:00Z", "day", "America/Santiago") // "2024-09-08T04:00:00Z" (local midnight is skipped, so the day starts at 01:00)
41
47
  * @example floorToZone("2024-05-15T10:20:30.123Z", "days", "Europe/Berlin") // "2024-05-14T22:00:00Z" (plural unit name)
42
48
  * @example floorToZone("2024-06-15T03:00:00Z", "year", "UTC") // "" (not a bucketing unit)
43
49
  * @example floorToZone("2024-06-15T03:00:00", "day", "UTC") // "" (zoneless, so it names no instant)
44
50
  * @example floorToZone("-271821-04-20T00:00:00Z", "month", "UTC") // "" (that month began before Temporal's range does)
45
51
  * @example floorToZone("2024-06-15T03:00:00Z", "day", "Invalid/Zone") // ""
52
+ * @example floorToZone("1970-01-01T13:00:00Z", "day", "-00:44:30") // "1970-01-01T00:44:30Z" (local midnight at a stored offset with seconds)
46
53
  */
47
54
  export function floorToZone(value, unit, timeZone) {
48
55
  // The singular name; the guard below rejects anything outside the four units.
49
56
  const resolvedUnit = resolveDateTimeUnit(unit);
57
+ const frame = zoneFrame(timeZone);
50
58
  if (!isValidInstant(value) ||
51
59
  !isValidZoneBucketUnit(resolvedUnit) ||
52
- !isValidTimeZone(timeZone)) {
60
+ frame === null) {
53
61
  return "";
54
62
  }
55
63
  try {
56
- const zoned = instantFrom(value).toZonedDateTimeISO(timeZone);
64
+ const zoned = frameZoned(instantFrom(value), frame);
57
65
  const start = zonedUnitStart(zoned, resolvedUnit);
58
- return start ? start.toInstant().toString() : "";
66
+ return start ? frameInstant(start, frame).toString() : "";
59
67
  }
60
68
  catch {
61
69
  return "";