@northguild/gmt 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/README.md +462 -22
  2. package/dist/calendar/calculate/bucketRange.d.ts +3 -3
  3. package/dist/calendar/calculate/bucketRange.js +6 -6
  4. package/dist/calendar/calculate/floorToZone.d.ts +5 -3
  5. package/dist/calendar/calculate/floorToZone.js +6 -5
  6. package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
  7. package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
  8. package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
  9. package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
  10. package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
  11. package/dist/calendar/calculate/getOrdinalDate.js +2 -3
  12. package/dist/calendar/calculate/getQuarter.d.ts +21 -9
  13. package/dist/calendar/calculate/getQuarter.js +8 -12
  14. package/dist/calendar/hours/addOperatingTime.d.ts +53 -0
  15. package/dist/calendar/hours/addOperatingTime.js +59 -0
  16. package/dist/calendar/hours/index.d.ts +7 -0
  17. package/dist/calendar/hours/index.js +7 -0
  18. package/dist/calendar/hours/isOpenAt.d.ts +39 -0
  19. package/dist/calendar/hours/isOpenAt.js +44 -0
  20. package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
  21. package/dist/calendar/hours/nextCloseAt.js +51 -0
  22. package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
  23. package/dist/calendar/hours/nextOpenAt.js +47 -0
  24. package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
  25. package/dist/calendar/hours/operatingIntervals.js +52 -0
  26. package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
  27. package/dist/calendar/hours/operatingTimeBetween.js +49 -0
  28. package/dist/calendar/hours/recurringWindows.d.ts +61 -0
  29. package/dist/calendar/hours/recurringWindows.js +80 -0
  30. package/dist/calendar/index.d.ts +1 -0
  31. package/dist/calendar/index.js +1 -0
  32. package/dist/duration/calculate/durationAs.d.ts +13 -8
  33. package/dist/duration/calculate/durationAs.js +4 -8
  34. package/dist/duration/compare/compareDurations.d.ts +12 -6
  35. package/dist/duration/compare/compareDurations.js +3 -6
  36. package/dist/duration/format/formatDuration.d.ts +16 -4
  37. package/dist/duration/format/formatDuration.js +4 -5
  38. package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
  39. package/dist/duration/normalize/normalizeDuration.js +6 -15
  40. package/dist/duration/parse/parseDuration.d.ts +21 -3
  41. package/dist/duration/parse/parseDuration.js +1 -3
  42. package/dist/instant/convert/classifyLocal.d.ts +1 -1
  43. package/dist/instant/convert/classifyLocal.js +1 -1
  44. package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
  45. package/dist/instant/convert/fromOffsetInstant.js +3 -1
  46. package/dist/instant/convert/resolveLocal.d.ts +12 -7
  47. package/dist/instant/convert/resolveLocal.js +6 -10
  48. package/dist/instant/convert/toOffsetInstant.d.ts +22 -9
  49. package/dist/instant/convert/toOffsetInstant.js +10 -3
  50. package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
  51. package/dist/intermodal/calculate/billingTimeline.js +2 -2
  52. package/dist/intermodal/calculate/chargeableDays.d.ts +13 -11
  53. package/dist/intermodal/calculate/chargeableDays.js +4 -9
  54. package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
  55. package/dist/intermodal/calculate/demurrageClock.js +7 -7
  56. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +5 -4
  57. package/dist/intermodal/calculate/freeTimeExpiry.js +6 -6
  58. package/dist/internal/businessCalendar.d.ts +5 -0
  59. package/dist/internal/businessCalendar.js +5 -1
  60. package/dist/internal/cycleFieldValue.d.ts +6 -4
  61. package/dist/internal/cycleFieldValue.js +6 -4
  62. package/dist/internal/daylightTime.d.ts +33 -0
  63. package/dist/internal/daylightTime.js +164 -0
  64. package/dist/internal/durationUntilString.js +4 -3
  65. package/dist/internal/englishCalendarNames.js +1 -2
  66. package/dist/internal/epochNanoseconds.d.ts +2 -0
  67. package/dist/internal/epochNanoseconds.js +2 -0
  68. package/dist/internal/exactDuration.d.ts +37 -0
  69. package/dist/internal/exactDuration.js +64 -0
  70. package/dist/internal/exactMoment.d.ts +72 -0
  71. package/dist/internal/exactMoment.js +114 -0
  72. package/dist/internal/fiscalCalendar.d.ts +4 -3
  73. package/dist/internal/fiscalCalendar.js +4 -3
  74. package/dist/internal/formatCalendarDays.d.ts +2 -2
  75. package/dist/internal/formatRelativeDuration.d.ts +21 -1
  76. package/dist/internal/formatRelativeDuration.js +47 -7
  77. package/dist/internal/index.d.ts +9 -4
  78. package/dist/internal/index.js +9 -4
  79. package/dist/internal/instantFormatOptions.js +2 -1
  80. package/dist/internal/instantNanoseconds.d.ts +75 -9
  81. package/dist/internal/instantNanoseconds.js +192 -11
  82. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  83. package/dist/internal/monthGridWeekRow.d.ts +2 -1
  84. package/dist/internal/monthGridWeekRow.js +2 -1
  85. package/dist/internal/normalizeTimeZone.d.ts +2 -2
  86. package/dist/internal/normalizeTimeZone.js +2 -2
  87. package/dist/internal/operatingSchedule.d.ts +129 -0
  88. package/dist/internal/operatingSchedule.js +668 -0
  89. package/dist/internal/optionOrDefault.d.ts +18 -0
  90. package/dist/internal/optionOrDefault.js +20 -0
  91. package/dist/internal/patternToken.d.ts +2 -2
  92. package/dist/internal/patternToken.js +28 -13
  93. package/dist/internal/plainDateUntil.js +10 -6
  94. package/dist/internal/punctuality.d.ts +38 -0
  95. package/dist/internal/punctuality.js +59 -0
  96. package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
  97. package/dist/internal/readDateTimeFormatOptions.js +93 -0
  98. package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
  99. package/dist/internal/resolveDurationRelativeTo.js +11 -1
  100. package/dist/internal/resolveRelativeRounding.d.ts +17 -6
  101. package/dist/internal/resolveRelativeRounding.js +27 -7
  102. package/dist/internal/resolveRelativeUnit.d.ts +30 -0
  103. package/dist/internal/resolveRelativeUnit.js +40 -0
  104. package/dist/internal/splitStep.d.ts +24 -1
  105. package/dist/internal/splitStep.js +34 -2
  106. package/dist/internal/startOrEndOfZoned.js +2 -3
  107. package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
  108. package/dist/internal/temporalCompat/capabilities.js +35 -3
  109. package/dist/internal/temporalCompat/fieldSearch.js +1 -1
  110. package/dist/internal/temporalCompat/index.d.ts +1 -1
  111. package/dist/internal/temporalCompat/index.js +1 -1
  112. package/dist/internal/temporalCompat/repros.d.ts +1 -1
  113. package/dist/internal/temporalCompat/repros.js +157 -0
  114. package/dist/internal/timestampEvents.d.ts +32 -0
  115. package/dist/internal/timestampEvents.js +76 -0
  116. package/dist/internal/utcZonedDateTime.d.ts +5 -2
  117. package/dist/internal/utcZonedDateTime.js +8 -5
  118. package/dist/internal/zonedBucket.js +8 -6
  119. package/dist/internal/zonedLocalDates.js +1 -1
  120. package/dist/internal/zonedTransitionSearch.d.ts +27 -0
  121. package/dist/internal/zonedTransitionSearch.js +218 -0
  122. package/dist/internal/zonedWallClock.d.ts +21 -7
  123. package/dist/internal/zonedWallClock.js +87 -18
  124. package/dist/internal/zonedWallClockOperations.d.ts +26 -13
  125. package/dist/internal/zonedWallClockOperations.js +87 -34
  126. package/dist/interval/validate/isValidInterval.d.ts +6 -3
  127. package/dist/interval/validate/isValidInterval.js +6 -3
  128. package/dist/plain/calculate/addDate.d.ts +11 -8
  129. package/dist/plain/calculate/addDate.js +5 -8
  130. package/dist/plain/calculate/addDateTime.d.ts +7 -4
  131. package/dist/plain/calculate/addDateTime.js +1 -4
  132. package/dist/plain/calculate/cycleDate.d.ts +16 -7
  133. package/dist/plain/calculate/cycleDate.js +3 -7
  134. package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
  135. package/dist/plain/calculate/cycleDateTime.js +1 -4
  136. package/dist/plain/calculate/cycleTime.d.ts +10 -5
  137. package/dist/plain/calculate/cycleTime.js +3 -5
  138. package/dist/plain/calculate/diffDate.d.ts +1 -1
  139. package/dist/plain/calculate/diffDate.js +1 -1
  140. package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
  141. package/dist/plain/calculate/diffDateAsDuration.js +1 -1
  142. package/dist/plain/calculate/diffDateTime.d.ts +1 -1
  143. package/dist/plain/calculate/diffDateTime.js +1 -1
  144. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
  145. package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
  146. package/dist/plain/calculate/diffTime.d.ts +1 -1
  147. package/dist/plain/calculate/diffTime.js +1 -1
  148. package/dist/plain/calculate/endOfDate.d.ts +8 -3
  149. package/dist/plain/calculate/endOfDate.js +1 -3
  150. package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
  151. package/dist/plain/calculate/endOfDateTime.js +1 -5
  152. package/dist/plain/calculate/endOfTime.d.ts +8 -2
  153. package/dist/plain/calculate/endOfTime.js +1 -2
  154. package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
  155. package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
  156. package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
  157. package/dist/plain/calculate/getWeekOfMonth.js +7 -4
  158. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
  159. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
  160. package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
  161. package/dist/plain/calculate/getWeeksInMonth.js +5 -2
  162. package/dist/plain/calculate/nextWeekday.d.ts +7 -3
  163. package/dist/plain/calculate/nextWeekday.js +1 -3
  164. package/dist/plain/calculate/previousWeekday.d.ts +7 -3
  165. package/dist/plain/calculate/previousWeekday.js +1 -3
  166. package/dist/plain/calculate/roundDate.d.ts +20 -7
  167. package/dist/plain/calculate/roundDate.js +3 -10
  168. package/dist/plain/calculate/roundDateTime.d.ts +22 -8
  169. package/dist/plain/calculate/roundDateTime.js +3 -11
  170. package/dist/plain/calculate/roundTime.d.ts +20 -4
  171. package/dist/plain/calculate/roundTime.js +3 -7
  172. package/dist/plain/calculate/setDate.d.ts +7 -5
  173. package/dist/plain/calculate/setDate.js +1 -5
  174. package/dist/plain/calculate/setDateTime.d.ts +8 -5
  175. package/dist/plain/calculate/setDateTime.js +1 -5
  176. package/dist/plain/calculate/setTime.d.ts +10 -6
  177. package/dist/plain/calculate/setTime.js +4 -6
  178. package/dist/plain/calculate/startOfDate.d.ts +8 -2
  179. package/dist/plain/calculate/startOfDate.js +1 -2
  180. package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
  181. package/dist/plain/calculate/startOfDateTime.js +1 -2
  182. package/dist/plain/calculate/startOfTime.d.ts +8 -1
  183. package/dist/plain/calculate/startOfTime.js +1 -1
  184. package/dist/plain/calculate/subtractDate.d.ts +7 -4
  185. package/dist/plain/calculate/subtractDate.js +1 -4
  186. package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
  187. package/dist/plain/calculate/subtractDateTime.js +1 -4
  188. package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
  189. package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
  190. package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
  191. package/dist/plain/compare/areDatesEqualBy.js +8 -6
  192. package/dist/plain/compare/isBetweenDate.d.ts +13 -2
  193. package/dist/plain/compare/isBetweenDate.js +4 -4
  194. package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
  195. package/dist/plain/compare/isBetweenDateTime.js +4 -4
  196. package/dist/plain/compare/isBetweenTime.d.ts +13 -2
  197. package/dist/plain/compare/isBetweenTime.js +4 -4
  198. package/dist/plain/compare/isRelativeDay.d.ts +1 -1
  199. package/dist/plain/compare/isRelativeDay.js +1 -1
  200. package/dist/plain/compare/isThisUnit.d.ts +1 -1
  201. package/dist/plain/compare/isThisUnit.js +1 -1
  202. package/dist/plain/format/formatCalendar.d.ts +21 -14
  203. package/dist/plain/format/formatCalendar.js +21 -16
  204. package/dist/plain/format/formatDate.js +5 -3
  205. package/dist/plain/format/formatDateRange.js +4 -2
  206. package/dist/plain/format/formatDateTime.js +4 -2
  207. package/dist/plain/format/formatDateTimeRange.js +4 -2
  208. package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
  209. package/dist/plain/format/formatDateTimeToParts.js +10 -6
  210. package/dist/plain/format/formatDateToParts.d.ts +13 -2
  211. package/dist/plain/format/formatDateToParts.js +8 -4
  212. package/dist/plain/format/formatRelativeDate.d.ts +16 -3
  213. package/dist/plain/format/formatRelativeDate.js +26 -15
  214. package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
  215. package/dist/plain/format/formatRelativeDateTime.js +8 -5
  216. package/dist/plain/format/formatRelativeTime.d.ts +16 -3
  217. package/dist/plain/format/formatRelativeTime.js +21 -13
  218. package/dist/plain/format/formatTime.js +4 -2
  219. package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
  220. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
  221. package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
  222. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
  223. package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
  224. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
  225. package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
  226. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
  227. package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
  228. package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
  229. package/dist/plain/interval/intervalFromDurationDate.js +1 -3
  230. package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
  231. package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
  232. package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
  233. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
  234. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
  235. package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
  236. package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
  237. package/dist/plain/interval/intervalSplitAtDate.js +2 -0
  238. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
  239. package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
  240. package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
  241. package/dist/plain/interval/intervalSplitAtTime.js +2 -0
  242. package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
  243. package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
  244. package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
  245. package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
  246. package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
  247. package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
  248. package/dist/plain/interval/intervalXorDate.d.ts +9 -0
  249. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
  250. package/dist/plain/interval/intervalXorTime.d.ts +9 -0
  251. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
  252. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
  253. package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
  254. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
  255. package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
  256. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
  257. package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
  258. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
  259. package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
  260. package/dist/plain/map/mapDatesInRange.d.ts +8 -4
  261. package/dist/plain/map/mapDatesInRange.js +1 -4
  262. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
  263. package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
  264. package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
  265. package/dist/plain/parse/parseDateWithPattern.js +10 -7
  266. package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
  267. package/dist/plain/parse/parseTimeWithPattern.js +10 -7
  268. package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
  269. package/dist/plain/parse/parseUnitFromDate.js +3 -3
  270. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  271. package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
  272. package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
  273. package/dist/plain/parse/parseWeekFromDate.js +2 -6
  274. package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
  275. package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
  276. package/dist/plain/validate/isValidDateRange.d.ts +19 -4
  277. package/dist/plain/validate/isValidDateRange.js +1 -4
  278. package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
  279. package/dist/plain/validate/isValidDateTimeRange.js +2 -5
  280. package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
  281. package/dist/plain/validate/isValidTimeRange.js +2 -5
  282. package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
  283. package/dist/precision/convert/fromExcelSerial.js +4 -5
  284. package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
  285. package/dist/precision/convert/fromNanoseconds.js +1 -1
  286. package/dist/precision/convert/toExcelSerial.d.ts +9 -3
  287. package/dist/precision/convert/toExcelSerial.js +3 -4
  288. package/dist/precision/convert/toNanoseconds.d.ts +11 -6
  289. package/dist/precision/convert/toNanoseconds.js +11 -6
  290. package/dist/precision/validate/isValidInstant.d.ts +12 -3
  291. package/dist/precision/validate/isValidInstant.js +12 -3
  292. package/dist/span/calculate/spanMs.d.ts +10 -4
  293. package/dist/span/calculate/spanMs.js +10 -4
  294. package/dist/span/calculate/spanNs.d.ts +10 -4
  295. package/dist/span/calculate/spanNs.js +10 -4
  296. package/dist/span/validate/isValidSpan.d.ts +8 -3
  297. package/dist/span/validate/isValidSpan.js +8 -3
  298. package/dist/transport/calculate/bestAvailable.d.ts +47 -0
  299. package/dist/transport/calculate/bestAvailable.js +76 -0
  300. package/dist/transport/calculate/crossingTime.d.ts +58 -0
  301. package/dist/transport/calculate/crossingTime.js +76 -0
  302. package/dist/transport/calculate/cutoffAt.d.ts +90 -0
  303. package/dist/transport/calculate/cutoffAt.js +209 -0
  304. package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
  305. package/dist/transport/calculate/cutoffSchedule.js +71 -0
  306. package/dist/transport/calculate/dwellTime.d.ts +16 -7
  307. package/dist/transport/calculate/dwellTime.js +12 -8
  308. package/dist/transport/calculate/estimateDrift.d.ts +65 -0
  309. package/dist/transport/calculate/estimateDrift.js +75 -0
  310. package/dist/transport/calculate/index.d.ts +8 -0
  311. package/dist/transport/calculate/index.js +8 -0
  312. package/dist/transport/calculate/nextDeparture.d.ts +78 -0
  313. package/dist/transport/calculate/nextDeparture.js +131 -0
  314. package/dist/transport/calculate/punctualityRate.d.ts +42 -0
  315. package/dist/transport/calculate/punctualityRate.js +59 -0
  316. package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
  317. package/dist/transport/calculate/scheduleDelivery.js +300 -0
  318. package/dist/transport/calculate/transitTime.d.ts +21 -3
  319. package/dist/transport/calculate/transitTime.js +29 -46
  320. package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
  321. package/dist/transport/compare/classifyPunctuality.js +64 -0
  322. package/dist/transport/compare/index.d.ts +4 -0
  323. package/dist/transport/compare/index.js +4 -0
  324. package/dist/transport/compare/isPastCutoff.d.ts +33 -0
  325. package/dist/transport/compare/isPastCutoff.js +48 -0
  326. package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
  327. package/dist/transport/compare/scheduleDeviation.js +53 -0
  328. package/dist/transport/compare/timeToCutoff.d.ts +31 -0
  329. package/dist/transport/compare/timeToCutoff.js +47 -0
  330. package/dist/transport/convert/etaAtZone.d.ts +7 -0
  331. package/dist/transport/convert/etaAtZone.js +9 -4
  332. package/dist/transport/index.d.ts +1 -0
  333. package/dist/transport/index.js +1 -0
  334. package/dist/types/business-calendar.d.ts +19 -14
  335. package/dist/types/calendar-options.d.ts +15 -3
  336. package/dist/types/date-cycle-field.d.ts +5 -0
  337. package/dist/types/date-duration-unit.d.ts +4 -0
  338. package/dist/types/date-time-cycle-field.d.ts +4 -0
  339. package/dist/types/date-time-duration-units.d.ts +4 -0
  340. package/dist/types/date-time-unit.d.ts +4 -0
  341. package/dist/types/date-unit.d.ts +4 -0
  342. package/dist/types/disambiguation.d.ts +8 -0
  343. package/dist/types/duration-relative-to.d.ts +8 -0
  344. package/dist/types/duration-string-options.d.ts +28 -0
  345. package/dist/types/fiscal-calendar.d.ts +1 -1
  346. package/dist/types/fractional-digit.d.ts +5 -0
  347. package/dist/types/free-time-options.d.ts +21 -11
  348. package/dist/types/index.d.ts +2 -1
  349. package/dist/types/index.js +2 -1
  350. package/dist/types/interval.d.ts +8 -1
  351. package/dist/types/offset.d.ts +9 -0
  352. package/dist/types/operating-schedule.d.ts +71 -0
  353. package/dist/types/overflow.d.ts +6 -0
  354. package/dist/types/relative-rounding-method.d.ts +6 -0
  355. package/dist/types/relative-time-options.d.ts +33 -5
  356. package/dist/types/rounding-options.d.ts +27 -0
  357. package/dist/types/time-cycle-field.d.ts +4 -0
  358. package/dist/types/time-duration-unit.d.ts +4 -0
  359. package/dist/types/time-unit.d.ts +4 -0
  360. package/dist/types/transport-timestamps.d.ts +54 -0
  361. package/dist/types/transport-timestamps.js +0 -0
  362. package/dist/unix/calculate/addUnix.d.ts +19 -5
  363. package/dist/unix/calculate/addUnix.js +1 -5
  364. package/dist/unix/calculate/diffUnix.d.ts +13 -3
  365. package/dist/unix/calculate/diffUnix.js +1 -3
  366. package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
  367. package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
  368. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
  369. package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
  370. package/dist/unix/calculate/endOfUnix.d.ts +20 -4
  371. package/dist/unix/calculate/endOfUnix.js +1 -4
  372. package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
  373. package/dist/unix/calculate/isBetweenUnix.js +4 -6
  374. package/dist/unix/calculate/roundUnix.d.ts +31 -3
  375. package/dist/unix/calculate/roundUnix.js +3 -6
  376. package/dist/unix/calculate/setUnix.d.ts +35 -9
  377. package/dist/unix/calculate/setUnix.js +4 -13
  378. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
  379. package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
  380. package/dist/unix/calculate/startOfUnix.d.ts +20 -4
  381. package/dist/unix/calculate/startOfUnix.js +1 -4
  382. package/dist/unix/calculate/subtractUnix.d.ts +19 -5
  383. package/dist/unix/calculate/subtractUnix.js +1 -5
  384. package/dist/unix/compare/areUnixEqual.d.ts +7 -1
  385. package/dist/unix/compare/areUnixEqual.js +1 -1
  386. package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
  387. package/dist/unix/compare/areUnixEqualBy.js +13 -9
  388. package/dist/unix/compare/isAfterUnix.d.ts +7 -1
  389. package/dist/unix/compare/isAfterUnix.js +1 -1
  390. package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
  391. package/dist/unix/compare/isBeforeUnix.js +1 -1
  392. package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
  393. package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
  394. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
  395. package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
  396. package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
  397. package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
  398. package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
  399. package/dist/unix/convert/convertUnixToUtc.js +3 -4
  400. package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
  401. package/dist/unix/convert/convertUnixToZoned.js +4 -5
  402. package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
  403. package/dist/unix/format/formatCalendarUnix.js +4 -5
  404. package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
  405. package/dist/unix/format/formatRelativeUnix.js +3 -5
  406. package/dist/unix/format/formatUnix.d.ts +24 -6
  407. package/dist/unix/format/formatUnix.js +8 -7
  408. package/dist/unix/get/getUnixNow.d.ts +8 -3
  409. package/dist/unix/get/getUnixNow.js +1 -3
  410. package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
  411. package/dist/unix/interval/intervalCountUnix.js +2 -5
  412. package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
  413. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
  414. package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
  415. package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
  416. package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
  417. package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
  418. package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
  419. package/dist/unix/interval/intervalLengthUnix.js +4 -6
  420. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
  421. package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
  422. package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
  423. package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
  424. package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
  425. package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
  426. package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
  427. package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
  428. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
  429. package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
  430. package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
  431. package/dist/unix/parse/parseDateFromUnix.js +1 -2
  432. package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
  433. package/dist/unix/parse/parseDayFromUnix.js +2 -2
  434. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
  435. package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
  436. package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
  437. package/dist/unix/parse/parseHourFromUnix.js +2 -2
  438. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
  439. package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
  440. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
  441. package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
  442. package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
  443. package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
  444. package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
  445. package/dist/unix/parse/parseMonthFromUnix.js +2 -2
  446. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
  447. package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
  448. package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
  449. package/dist/unix/parse/parseSecondFromUnix.js +2 -2
  450. package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
  451. package/dist/unix/parse/parseTimeFromUnix.js +1 -2
  452. package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
  453. package/dist/unix/parse/parseUnitFromUnix.js +2 -3
  454. package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
  455. package/dist/unix/parse/parseWeekFromUnix.js +3 -7
  456. package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
  457. package/dist/unix/parse/parseYearFromUnix.js +2 -2
  458. package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
  459. package/dist/unix/validate/isValidUnixRange.js +1 -4
  460. package/dist/utc/calculate/addUtc.d.ts +7 -4
  461. package/dist/utc/calculate/addUtc.js +1 -4
  462. package/dist/utc/calculate/diffUtc.d.ts +1 -1
  463. package/dist/utc/calculate/diffUtc.js +1 -1
  464. package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
  465. package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
  466. package/dist/utc/calculate/endOfUtc.d.ts +16 -3
  467. package/dist/utc/calculate/endOfUtc.js +2 -3
  468. package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
  469. package/dist/utc/calculate/isBetweenUtc.js +4 -4
  470. package/dist/utc/calculate/roundUtc.d.ts +26 -9
  471. package/dist/utc/calculate/roundUtc.js +3 -12
  472. package/dist/utc/calculate/setUtc.d.ts +7 -4
  473. package/dist/utc/calculate/setUtc.js +1 -4
  474. package/dist/utc/calculate/startOfUtc.d.ts +15 -2
  475. package/dist/utc/calculate/startOfUtc.js +1 -2
  476. package/dist/utc/calculate/subtractUtc.d.ts +7 -4
  477. package/dist/utc/calculate/subtractUtc.js +1 -4
  478. package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
  479. package/dist/utc/compare/areUtcEqualBy.js +2 -3
  480. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
  481. package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
  482. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
  483. package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
  484. package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
  485. package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
  486. package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
  487. package/dist/utc/convert/convertUtcToUnix.js +3 -4
  488. package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
  489. package/dist/utc/convert/convertUtcToZoned.js +1 -1
  490. package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
  491. package/dist/utc/format/formatCalendarUtc.js +8 -6
  492. package/dist/utc/format/formatHttp.d.ts +1 -1
  493. package/dist/utc/format/formatHttp.js +1 -1
  494. package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
  495. package/dist/utc/format/formatRelativeUtc.js +9 -11
  496. package/dist/utc/format/formatUtc.d.ts +17 -15
  497. package/dist/utc/format/formatUtc.js +8 -8
  498. package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
  499. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
  500. package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
  501. package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
  502. package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
  503. package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
  504. package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
  505. package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
  506. package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
  507. package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
  508. package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
  509. package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
  510. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
  511. package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
  512. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
  513. package/dist/utc/parse/parseDateFromUtc.js +1 -3
  514. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
  515. package/dist/utc/parse/parseDayFromUtc.js +1 -3
  516. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
  517. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
  518. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
  519. package/dist/utc/parse/parseHourFromUtc.js +1 -3
  520. package/dist/utc/parse/parseHttp.d.ts +1 -1
  521. package/dist/utc/parse/parseHttp.js +1 -1
  522. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
  523. package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
  524. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
  525. package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
  526. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
  527. package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
  528. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
  529. package/dist/utc/parse/parseMonthFromUtc.js +1 -3
  530. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
  531. package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
  532. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
  533. package/dist/utc/parse/parseSecondFromUtc.js +1 -3
  534. package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
  535. package/dist/utc/parse/parseTimeFromUtc.js +5 -6
  536. package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
  537. package/dist/utc/parse/parseUnitFromUtc.js +6 -8
  538. package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
  539. package/dist/utc/parse/parseWeekFromUtc.js +7 -13
  540. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
  541. package/dist/utc/parse/parseYearFromUtc.js +1 -3
  542. package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
  543. package/dist/utc/validate/isValidUtcRange.js +2 -5
  544. package/dist/zoned/calculate/addZoned.d.ts +20 -10
  545. package/dist/zoned/calculate/addZoned.js +6 -13
  546. package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
  547. package/dist/zoned/calculate/cycleZoned.js +1 -8
  548. package/dist/zoned/calculate/diffZoned.d.ts +1 -1
  549. package/dist/zoned/calculate/diffZoned.js +1 -1
  550. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
  551. package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
  552. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
  553. package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
  554. package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
  555. package/dist/zoned/calculate/endOfZoned.js +2 -3
  556. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
  557. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
  558. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
  559. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
  560. package/dist/zoned/calculate/roundZoned.d.ts +21 -4
  561. package/dist/zoned/calculate/roundZoned.js +3 -7
  562. package/dist/zoned/calculate/setZoned.d.ts +25 -8
  563. package/dist/zoned/calculate/setZoned.js +4 -12
  564. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
  565. package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
  566. package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
  567. package/dist/zoned/calculate/startOfZoned.js +1 -3
  568. package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
  569. package/dist/zoned/calculate/subtractZoned.js +6 -13
  570. package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
  571. package/dist/zoned/compare/areZonedEqualBy.js +7 -5
  572. package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
  573. package/dist/zoned/compare/isBetweenZoned.js +4 -3
  574. package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
  575. package/dist/zoned/compare/isInDaylightSaving.js +40 -44
  576. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
  577. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
  578. package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
  579. package/dist/zoned/convert/convertZonedToUnix.js +2 -4
  580. package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
  581. package/dist/zoned/convert/convertZonedToZoned.js +1 -1
  582. package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
  583. package/dist/zoned/format/formatCalendarZoned.js +13 -9
  584. package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
  585. package/dist/zoned/format/formatRelativeZoned.js +7 -4
  586. package/dist/zoned/format/formatRfc2822.d.ts +2 -2
  587. package/dist/zoned/format/formatRfc2822.js +2 -2
  588. package/dist/zoned/format/formatRfc3339.d.ts +2 -3
  589. package/dist/zoned/format/formatRfc3339.js +2 -3
  590. package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
  591. package/dist/zoned/format/formatTimeZoneName.js +5 -4
  592. package/dist/zoned/format/formatZonedDateTime.js +2 -1
  593. package/dist/zoned/format/formatZonedRange.js +2 -1
  594. package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
  595. package/dist/zoned/format/formatZonedToParts.js +8 -5
  596. package/dist/zoned/get/getDstTransitions.d.ts +9 -10
  597. package/dist/zoned/get/getDstTransitions.js +12 -3
  598. package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
  599. package/dist/zoned/get/getTimeZoneOffset.js +6 -3
  600. package/dist/zoned/get/getZonedNow.d.ts +13 -1
  601. package/dist/zoned/get/getZonedNow.js +12 -3
  602. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
  603. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
  604. package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
  605. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
  606. package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
  607. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
  608. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
  609. package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
  610. package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
  611. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
  612. package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
  613. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
  614. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
  615. package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
  616. package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
  617. package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
  618. package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
  619. package/dist/zoned/parse/parseRfc2822.js +1 -1
  620. package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
  621. package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
  622. package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
  623. package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
  624. package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
  625. package/dist/zoned/validate/hasDaylightSaving.js +47 -31
  626. package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
  627. package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
  628. package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
  629. package/dist/zoned/validate/isValidZonedRange.js +1 -4
  630. package/package.json +18 -5
  631. package/skills/gmt-arithmetic/SKILL.md +1 -1
  632. package/skills/gmt-basics/SKILL.md +10 -1
  633. package/skills/gmt-integration/SKILL.md +10 -5
  634. package/skills/gmt-timezone/SKILL.md +150 -21
  635. package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
  636. package/dist/internal/resolveReadingTimeZone.js +0 -18
  637. package/dist/types/duration-unit.d.ts +0 -5
  638. /package/dist/types/{duration-unit.js → operating-schedule.js} +0 -0
@@ -34,6 +34,15 @@ export declare function intervalXorAllZoned(intervals: Array<{
34
34
  start: string;
35
35
  end: string;
36
36
  }>): Array<{
37
+ /**
38
+ * The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
39
+ * zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
40
+ */
37
41
  start: string;
42
+ /**
43
+ * The first instant after the interval, in the same format as `start`. It is exclusive: the
44
+ * interval holds everything from `start` up to but not including this value. It is always later
45
+ * than `start`.
46
+ */
38
47
  end: string;
39
48
  }>;
@@ -44,6 +44,15 @@
44
44
  * @example intervalXorZoned("invalid", "2024-06-30T12:00:00+00:00[UTC]", "2024-07-01T13:00:00+00:00[UTC]", "2024-12-31T17:00:00+00:00[UTC]") // []
45
45
  */
46
46
  export declare function intervalXorZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
47
+ /**
48
+ * The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
49
+ * zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
50
+ */
47
51
  start: string;
52
+ /**
53
+ * The first instant after the interval, in the same format as `start`. It is exclusive: the
54
+ * interval holds everything from `start` up to but not including this value. It is always later
55
+ * than `start`.
56
+ */
48
57
  end: string;
49
58
  }>;
@@ -38,6 +38,15 @@ export declare function mergeIntervalsZoned(intervals: Array<{
38
38
  start: string;
39
39
  end: string;
40
40
  }>): Array<{
41
+ /**
42
+ * The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
43
+ * zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
44
+ */
41
45
  start: string;
46
+ /**
47
+ * The first instant after the interval, in the same format as `start`. It is exclusive: the
48
+ * interval holds everything from `start` up to but not including this value. It is always later
49
+ * than `start`.
50
+ */
42
51
  end: string;
43
52
  }>;
@@ -6,14 +6,20 @@
6
6
  * no instant and together cover `[start, end)` exactly once.
7
7
  * - The final sub-interval is trimmed so its `end` never exceeds the original `end`.
8
8
  * - Calendar-unit boundaries (years, months, weeks, days) are computed from `start`
9
- * (`start + k × amount`, as Temporal and Luxon's `Interval.splitBy` do), so month-end starts
10
- * don't drift: a monthly split from January 31 lands on February 29, March 31, April 30.
9
+ * (`start + k × amount`), so month-end starts don't drift: a monthly split from January 31
10
+ * lands on February 29, March 31, April 30. Temporal's `add` constrains a day the month lacks
11
+ * to the month's last day, and stepping from that boundary would keep the shortened day
12
+ * (February 29, then March 29).
13
+ * - Comparison: Luxon's `Interval.splitBy` computes each boundary from the start the same way.
11
14
  * - Exact-unit boundaries (hours and smaller) step from the previous boundary. Exact units never
12
15
  * clamp, and stepping keeps nanosecond precision where `k × amount` would pass
13
16
  * `Number.MAX_SAFE_INTEGER`.
14
17
  * - A calendar step that resolves to the same instant as the previous boundary (a deleted local
15
18
  * day, such as 30 December 2011 in `Pacific/Apia`) is skipped, so no empty slice is produced.
16
19
  * A step that goes backwards returns `[]`.
20
+ * - `start` and `end` may name different time zones. Steps are taken from `start`, so the first
21
+ * `start` and every inner boundary are written in `start`'s zone; the last `end` is the `end`
22
+ * argument, in its own zone.
17
23
  * - Returns `[{ start, end }]` when `start === end` (zero-length interval).
18
24
  * - Accepts RFC 9557 calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) as
19
25
  * well as bare ISO ones — E7 (issue #152). Stepping by a calendar unit ("1 month") resolves
@@ -24,9 +30,8 @@
24
30
  * string (E7's D7-zoned).
25
31
  * - Returns `[]` on invalid input (unparseable start/end, unsupported unit, non-positive amount,
26
32
  * leap-second strings).
27
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: a split
28
- * into more slices returns `[]`, decided from the span before stepping where it can be, and
29
- * otherwise as soon as slice `maxPieces + 1` is due. An invalid `maxPieces` also returns `[]`.
33
+ * - A split into more than `options.maxPieces` slices returns `[]`, decided from the span before
34
+ * stepping where it can be, and otherwise as soon as slice `maxPieces + 1` is due.
30
35
  * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
31
36
  * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
32
37
  *
@@ -34,7 +39,7 @@
34
39
  * @param end ISO 8601 zoned datetime string for the interval end
35
40
  * @param unit duration unit string — any `DateTimeDurationUnit`
36
41
  * @param amount positive number of units per step
37
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
42
+ * @param options optional limit on the size of the output
38
43
  * @returns array of `{ start, end }` records, or [] on invalid input
39
44
  *
40
45
  * @example splitIntervalByUnitZoned("2024-01-01T00:00:00+00:00[UTC]", "2024-01-02T00:00:00+00:00[UTC]", "hour", 6) // [{ start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-01T06:00:00+00:00[UTC]" }, { start: "2024-01-01T06:00:00+00:00[UTC]", end: "2024-01-01T12:00:00+00:00[UTC]" }, { start: "2024-01-01T12:00:00+00:00[UTC]", end: "2024-01-01T18:00:00+00:00[UTC]" }, { start: "2024-01-01T18:00:00+00:00[UTC]", end: "2024-01-02T00:00:00+00:00[UTC]" }]
@@ -47,8 +52,24 @@
47
52
  * @example splitIntervalByUnitZoned("2024-01-01T00:00:00+00:00[UTC]", "2024-01-01T01:30:00+00:00[UTC]", "hour", 1, { maxPieces: 2 }) // [{ start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-01T01:00:00+00:00[UTC]" }, { start: "2024-01-01T01:00:00+00:00[UTC]", end: "2024-01-01T01:30:00+00:00[UTC]" }]
48
53
  */
49
54
  export declare function splitIntervalByUnitZoned(start: string, end: string, unit: string, amount: number, options?: {
55
+ /**
56
+ * The most records the result may hold. A result that would hold more, or more than the longest
57
+ * possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
58
+ * positive safe integer also returns `[]`.
59
+ *
60
+ * @defaultValue `1_000_000`
61
+ */
50
62
  maxPieces?: number;
51
63
  }): Array<{
64
+ /**
65
+ * The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
66
+ * zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
67
+ */
52
68
  start: string;
69
+ /**
70
+ * The first instant after the interval, in the same format as `start`. It is exclusive: the
71
+ * interval holds everything from `start` up to but not including this value. It can equal
72
+ * `start`, which makes the interval empty.
73
+ */
53
74
  end: string;
54
75
  }>;
@@ -13,14 +13,20 @@ import { minSlicesForSpan } from "../../internal/splitStep.js";
13
13
  * no instant and together cover `[start, end)` exactly once.
14
14
  * - The final sub-interval is trimmed so its `end` never exceeds the original `end`.
15
15
  * - Calendar-unit boundaries (years, months, weeks, days) are computed from `start`
16
- * (`start + k × amount`, as Temporal and Luxon's `Interval.splitBy` do), so month-end starts
17
- * don't drift: a monthly split from January 31 lands on February 29, March 31, April 30.
16
+ * (`start + k × amount`), so month-end starts don't drift: a monthly split from January 31
17
+ * lands on February 29, March 31, April 30. Temporal's `add` constrains a day the month lacks
18
+ * to the month's last day, and stepping from that boundary would keep the shortened day
19
+ * (February 29, then March 29).
20
+ * - Comparison: Luxon's `Interval.splitBy` computes each boundary from the start the same way.
18
21
  * - Exact-unit boundaries (hours and smaller) step from the previous boundary. Exact units never
19
22
  * clamp, and stepping keeps nanosecond precision where `k × amount` would pass
20
23
  * `Number.MAX_SAFE_INTEGER`.
21
24
  * - A calendar step that resolves to the same instant as the previous boundary (a deleted local
22
25
  * day, such as 30 December 2011 in `Pacific/Apia`) is skipped, so no empty slice is produced.
23
26
  * A step that goes backwards returns `[]`.
27
+ * - `start` and `end` may name different time zones. Steps are taken from `start`, so the first
28
+ * `start` and every inner boundary are written in `start`'s zone; the last `end` is the `end`
29
+ * argument, in its own zone.
24
30
  * - Returns `[{ start, end }]` when `start === end` (zero-length interval).
25
31
  * - Accepts RFC 9557 calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) as
26
32
  * well as bare ISO ones — E7 (issue #152). Stepping by a calendar unit ("1 month") resolves
@@ -31,9 +37,8 @@ import { minSlicesForSpan } from "../../internal/splitStep.js";
31
37
  * string (E7's D7-zoned).
32
38
  * - Returns `[]` on invalid input (unparseable start/end, unsupported unit, non-positive amount,
33
39
  * leap-second strings).
34
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: a split
35
- * into more slices returns `[]`, decided from the span before stepping where it can be, and
36
- * otherwise as soon as slice `maxPieces + 1` is due. An invalid `maxPieces` also returns `[]`.
40
+ * - A split into more than `options.maxPieces` slices returns `[]`, decided from the span before
41
+ * stepping where it can be, and otherwise as soon as slice `maxPieces + 1` is due.
37
42
  * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
38
43
  * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
39
44
  *
@@ -41,7 +46,7 @@ import { minSlicesForSpan } from "../../internal/splitStep.js";
41
46
  * @param end ISO 8601 zoned datetime string for the interval end
42
47
  * @param unit duration unit string — any `DateTimeDurationUnit`
43
48
  * @param amount positive number of units per step
44
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
49
+ * @param options optional limit on the size of the output
45
50
  * @returns array of `{ start, end }` records, or [] on invalid input
46
51
  *
47
52
  * @example splitIntervalByUnitZoned("2024-01-01T00:00:00+00:00[UTC]", "2024-01-02T00:00:00+00:00[UTC]", "hour", 6) // [{ start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-01T06:00:00+00:00[UTC]" }, { start: "2024-01-01T06:00:00+00:00[UTC]", end: "2024-01-01T12:00:00+00:00[UTC]" }, { start: "2024-01-01T12:00:00+00:00[UTC]", end: "2024-01-01T18:00:00+00:00[UTC]" }, { start: "2024-01-01T18:00:00+00:00[UTC]", end: "2024-01-02T00:00:00+00:00[UTC]" }]
@@ -3,9 +3,7 @@
3
3
  *
4
4
  * - Both datetimes must have the same timezone.
5
5
  * - Returns [] for invalid inputs, mismatched timezones, start > end, or invalid step.
6
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when the
7
- * range holds more dates than that, it returns `[]` without generating any. An invalid
8
- * `maxPieces` also returns `[]`.
6
+ * - A range holding more dates than `options.maxPieces` returns `[]` without generating any.
9
7
  * - An explicit `undefined` `stepDays` is the default step, so `(start, end, undefined, options)`
10
8
  * reaches `options`. **Compatibility:** before 1.16.0 it returned `[]`.
11
9
  * - **End-inclusive, where the `interval*` functions are half-open.** This enumerates the dates a
@@ -16,7 +14,7 @@
16
14
  * @param startZonedDateTime start zoned ISO 8601 datetime string
17
15
  * @param endZonedDateTime end zoned ISO 8601 datetime string
18
16
  * @param stepDays optional positive integer step in days
19
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
17
+ * @param options optional limit on the size of the output
20
18
  * @returns array of ISO date strings or [] when invalid
21
19
  *
22
20
  * @example mapZonedDatesInRange("+275760-09-12T00:00:00+00:00[UTC]", "+275760-09-13T00:00:00+00:00[UTC]") // ["+275760-09-12", "+275760-09-13"] (a range ending on the maximum instant)
@@ -28,5 +26,12 @@
28
26
  * @example mapZonedDatesInRange("2024-02-28T12:00:00+00:00[UTC]", "2024-03-02T12:00:00+00:00[UTC]", 1, { maxPieces: 10 }) // ["2024-02-28", "2024-02-29", "2024-03-01", "2024-03-02"]
29
27
  */
30
28
  export declare function mapZonedDatesInRange(startZonedDateTime: string, endZonedDateTime: string, stepDays?: number, options?: {
29
+ /**
30
+ * The most dates the result may hold. A result that would hold more, or more than the longest
31
+ * possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
32
+ * positive safe integer also returns `[]`.
33
+ *
34
+ * @defaultValue `1_000_000`
35
+ */
31
36
  maxPieces?: number;
32
37
  }): string[];
@@ -8,9 +8,7 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
8
8
  *
9
9
  * - Both datetimes must have the same timezone.
10
10
  * - Returns [] for invalid inputs, mismatched timezones, start > end, or invalid step.
11
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when the
12
- * range holds more dates than that, it returns `[]` without generating any. An invalid
13
- * `maxPieces` also returns `[]`.
11
+ * - A range holding more dates than `options.maxPieces` returns `[]` without generating any.
14
12
  * - An explicit `undefined` `stepDays` is the default step, so `(start, end, undefined, options)`
15
13
  * reaches `options`. **Compatibility:** before 1.16.0 it returned `[]`.
16
14
  * - **End-inclusive, where the `interval*` functions are half-open.** This enumerates the dates a
@@ -21,7 +19,7 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
21
19
  * @param startZonedDateTime start zoned ISO 8601 datetime string
22
20
  * @param endZonedDateTime end zoned ISO 8601 datetime string
23
21
  * @param stepDays optional positive integer step in days
24
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
22
+ * @param options optional limit on the size of the output
25
23
  * @returns array of ISO date strings or [] when invalid
26
24
  *
27
25
  * @example mapZonedDatesInRange("+275760-09-12T00:00:00+00:00[UTC]", "+275760-09-13T00:00:00+00:00[UTC]") // ["+275760-09-12", "+275760-09-13"] (a range ending on the maximum instant)
@@ -3,7 +3,7 @@
3
3
  * `Date:` headers use — into a zoned ISO 8601 datetime string.
4
4
  *
5
5
  * - **Decoding, not display.** Weekday and month names are English, per the
6
- * fixed grammar (see `formatRfc2822`'s JSDoc and roadmap Decision 1); like
6
+ * fixed grammar (see `formatRfc2822`'s JSDoc); like
7
7
  * every ABNF literal they match in any case (RFC 5234 §2.3).
8
8
  * - **Reads what a conformant receiver must.** RFC 5322 §3.3 syntax: folding
9
9
  * white space (spaces, tabs, folded lines), nested comments such as a
@@ -5,7 +5,7 @@ import { readRfc5322DateTime } from "../../internal/rfc5322DateTime.js";
5
5
  * `Date:` headers use — into a zoned ISO 8601 datetime string.
6
6
  *
7
7
  * - **Decoding, not display.** Weekday and month names are English, per the
8
- * fixed grammar (see `formatRfc2822`'s JSDoc and roadmap Decision 1); like
8
+ * fixed grammar (see `formatRfc2822`'s JSDoc); like
9
9
  * every ABNF literal they match in any case (RFC 5234 §2.3).
10
10
  * - **Reads what a conformant receiver must.** RFC 5322 §3.3 syntax: folding
11
11
  * white space (spaces, tabs, folded lines), nested comments such as a
@@ -33,13 +33,11 @@ export type ZonedParseUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "
33
33
  * - Uses Temporal.ZonedDateTime.from to parse.
34
34
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
35
35
  * does; `"dayOfWeek"` has no plural.
36
- * - `weekStartsOn: "sunday"` numbers weeks by UTS #35 (week 1 holds 1 January, so late-December
37
- * days can be week 1); any value other than `"monday"` or `"sunday"` returns "".
38
36
  * - Returns "" for invalid input.
39
37
  *
40
38
  * @param value zoned ISO 8601 datetime string
41
39
  * @param unit unit to extract
42
- * @param optionsArg optional settings (e.g. weekStartsOn for week calculations); a non-object value (such as `null`) is invalid
40
+ * @param optionsArg optional setting for the week's first day; a non-object value (such as `null`) is invalid
43
41
  * @returns string representation of the requested unit or "" when invalid
44
42
  *
45
43
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "year") // "2024"
@@ -48,5 +46,13 @@ export type ZonedParseUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "
48
46
  * @example parseUnitFromZoned("invalid", "year") // ""
49
47
  */
50
48
  export declare function parseUnitFromZoned(value: string, unit: ZonedParseUnit, optionsArg?: {
49
+ /**
50
+ * The first day of the week, which sets how the `"week"` unit is numbered. `"monday"` gives the
51
+ * ISO 8601 week number, where week 1 holds the year's first Thursday; `"sunday"` gives the UTS
52
+ * #35 week number with a Sunday first day and one minimal day, where week 1 holds 1 January.
53
+ * Any other value returns `""`, whatever the unit.
54
+ *
55
+ * @defaultValue `"monday"`
56
+ */
51
57
  weekStartsOn?: "monday" | "sunday";
52
58
  }): string;
@@ -27,13 +27,11 @@ function isValidZonedUnit(unit) {
27
27
  * - Uses Temporal.ZonedDateTime.from to parse.
28
28
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
29
29
  * does; `"dayOfWeek"` has no plural.
30
- * - `weekStartsOn: "sunday"` numbers weeks by UTS #35 (week 1 holds 1 January, so late-December
31
- * days can be week 1); any value other than `"monday"` or `"sunday"` returns "".
32
30
  * - Returns "" for invalid input.
33
31
  *
34
32
  * @param value zoned ISO 8601 datetime string
35
33
  * @param unit unit to extract
36
- * @param optionsArg optional settings (e.g. weekStartsOn for week calculations); a non-object value (such as `null`) is invalid
34
+ * @param optionsArg optional setting for the week's first day; a non-object value (such as `null`) is invalid
37
35
  * @returns string representation of the requested unit or "" when invalid
38
36
  *
39
37
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "year") // "2024"
@@ -1,18 +1,17 @@
1
1
  /**
2
2
  * Return the week of the year for a given ISO 8601 zoned datetime string.
3
3
  *
4
- * - `"monday"` (default) is the ISO 8601 week of the week-year: week 1 is the week containing the
4
+ * - `"monday"` is the ISO 8601 week of the week-year: week 1 is the week containing the
5
5
  * first Thursday, so late-December days can be week 1 of the next year (a value on 2024-12-31
6
6
  * → 1). The result is 1–53.
7
7
  * - `"sunday"` is the UTS #35 week of the week-year with a Sunday first day and minimal days 1:
8
8
  * week 1 is the Sunday-first week holding 1 January, so late-December days can be week 1 of the
9
9
  * next year (2024-12-31 → 1, 2000-12-30 → 53). The result is 1–53.
10
- * - `weekStartsOn` other than `"monday"` or `"sunday"` returns null.
11
10
  * - The week is read from the value's own date on its own wall clock.
12
11
  * - Returns null for invalid input.
13
12
  *
14
13
  * @param value ISO zoned datetime string
15
- * @param optionsArg optional: weekStartsOn ("monday" | "sunday") for week calculations
14
+ * @param optionsArg optional setting for the week's first day
16
15
  * @returns Week number (1-53), or null on invalid input
17
16
  *
18
17
  * @example parseWeekFromZoned("2024-01-01T14:30:45.123+00:00[UTC]") // 1
@@ -23,5 +22,13 @@
23
22
  * @example parseWeekFromZoned("invalid") // null
24
23
  */
25
24
  export declare function parseWeekFromZoned(value: string, optionsArg?: {
25
+ /**
26
+ * The first day of the week, which sets how the week is numbered. `"monday"` gives the ISO 8601
27
+ * week number, where week 1 holds the year's first Thursday; `"sunday"` gives the UTS #35 week
28
+ * number with a Sunday first day and one minimal day, where week 1 holds 1 January. Any other
29
+ * value returns `null`.
30
+ *
31
+ * @defaultValue `"monday"`
32
+ */
26
33
  weekStartsOn?: "monday" | "sunday";
27
34
  }): number | null;
@@ -6,18 +6,17 @@ import { isOptionsArgument } from "../../internal/isObject.js";
6
6
  /**
7
7
  * Return the week of the year for a given ISO 8601 zoned datetime string.
8
8
  *
9
- * - `"monday"` (default) is the ISO 8601 week of the week-year: week 1 is the week containing the
9
+ * - `"monday"` is the ISO 8601 week of the week-year: week 1 is the week containing the
10
10
  * first Thursday, so late-December days can be week 1 of the next year (a value on 2024-12-31
11
11
  * → 1). The result is 1–53.
12
12
  * - `"sunday"` is the UTS #35 week of the week-year with a Sunday first day and minimal days 1:
13
13
  * week 1 is the Sunday-first week holding 1 January, so late-December days can be week 1 of the
14
14
  * next year (2024-12-31 → 1, 2000-12-30 → 53). The result is 1–53.
15
- * - `weekStartsOn` other than `"monday"` or `"sunday"` returns null.
16
15
  * - The week is read from the value's own date on its own wall clock.
17
16
  * - Returns null for invalid input.
18
17
  *
19
18
  * @param value ISO zoned datetime string
20
- * @param optionsArg optional: weekStartsOn ("monday" | "sunday") for week calculations
19
+ * @param optionsArg optional setting for the week's first day
21
20
  * @returns Week number (1-53), or null on invalid input
22
21
  *
23
22
  * @example parseWeekFromZoned("2024-01-01T14:30:45.123+00:00[UTC]") // 1
@@ -1,17 +1,48 @@
1
1
  /**
2
- * Check whether an IANA timeZone identifier observes daylight saving time.
2
+ * Check whether a timeZone observes daylight saving time at a reference instant.
3
3
  *
4
- * - Compares UTC offsets at two dates six months apart (January and July).
5
- * - A zone is considered to have DST if its offset differs between the two dates.
6
- * - Returns false for invalid or unresolvable timeZone identifiers.
4
+ * - True when the zone is in daylight time at the reference instant, or a daylight period begins
5
+ * less than 365 days after it. So a zone in its winter is true, and a zone that has stopped
6
+ * changing its clocks is false.
7
+ * - With `options.at` the answer does not depend on the day the code runs.
8
+ * - The rule is GMT's own definition, not the tz database's daylight flag, which no JavaScript
9
+ * API exposes: daylight time runs from a forward change of the zone's clocks to the backward
10
+ * change of the same size that undoes it, less than 365 days later.
11
+ * - Read as standard time, because the offsets do not show otherwise: the last summer before a
12
+ * zone kept its daylight offset for good; a daylight period held 365 days or longer; one that
13
+ * began, ended or was interrupted by a move of standard time, so the offset changes part-way
14
+ * through and the rest, or all, of it is not paired (`Asia/Tomsk` 2002); and one whose end is
15
+ * past the last instant Temporal can represent.
16
+ * - A forward change never undone is a change of standard time: `Europe/Istanbul` is false from
17
+ * 2016 on, although its clocks went forward in March 2016.
18
+ * - Read from the runtime's time zone data, so the answer can change when that data does.
19
+ * - Returns false for an invalid timeZone, an invalid `at`, an options argument that is not an
20
+ * object, and a fixed offset.
7
21
  *
8
22
  * @param timeZone timeZone identifier to check
9
- * @returns boolean indicating whether the timeZone observes DST
23
+ * @param options optional setting for the reference instant
24
+ * @returns boolean indicating whether the timeZone observes DST, or false on invalid input
10
25
  *
11
- * @example hasDaylightSaving("America/New_York") // true
12
- * @example hasDaylightSaving("Europe/Berlin") // true
13
- * @example hasDaylightSaving("Asia/Tokyo") // false
14
- * @example hasDaylightSaving("UTC") // false
15
- * @example hasDaylightSaving("Invalid/Zone") // false
26
+ * @example hasDaylightSaving("America/New_York", { at: "2024-01-15T12:00:00Z" }) // true
27
+ * @example hasDaylightSaving("Australia/Sydney", { at: "2024-06-15T12:00:00Z" }) // true (winter; the next period begins in October)
28
+ * @example hasDaylightSaving("Asia/Tokyo", { at: "2024-01-15T12:00:00Z" }) // false
29
+ * @example hasDaylightSaving("Europe/Istanbul", { at: "2015-06-15T12:00:00Z" }) // true
30
+ * @example hasDaylightSaving("Europe/Istanbul", { at: "2016-06-15T12:00:00Z" }) // false (the March 2016 advance was never undone)
31
+ * @example hasDaylightSaving("America/Sao_Paulo", { at: "2018-06-15T12:00:00Z" }) // true
32
+ * @example hasDaylightSaving("America/Sao_Paulo", { at: "2019-06-15T12:00:00Z" }) // false (last daylight period ended 2019-02-17)
33
+ * @example hasDaylightSaving("UTC", { at: "2024-01-15T12:00:00Z" }) // false
34
+ * @example hasDaylightSaving("+05:00", { at: "2024-01-15T12:00:00Z" }) // false
35
+ * @example hasDaylightSaving("Invalid/Zone", { at: "2024-01-15T12:00:00Z" }) // false
36
+ * @example hasDaylightSaving("America/New_York", { at: "2024-01-15" }) // false (not an instant)
16
37
  */
17
- export declare function hasDaylightSaving(timeZone: string): boolean;
38
+ export declare function hasDaylightSaving(timeZone: string, options?: {
39
+ /**
40
+ * The reference instant the zone is judged at, as an ISO 8601 instant string ending in `Z`, an
41
+ * offset or a bracketed zone. It only names an instant, as `isValidInstant` reads it: a
42
+ * bracketed zone is not validated and does not replace `timeZone`. An invalid value returns
43
+ * false.
44
+ *
45
+ * @defaultValue The current instant.
46
+ */
47
+ at?: string;
48
+ }): boolean;
@@ -1,41 +1,57 @@
1
- import { zonedDateTimeFrom } from "../../internal/index.js";
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { isOptionsArgument, observesDaylightTime, parseInstantNanoseconds, } from "../../internal/index.js";
3
+ import { isValidTimeZone } from "./isValidTimeZone.js";
2
4
  /**
3
- * Check whether an IANA timeZone identifier observes daylight saving time.
5
+ * Check whether a timeZone observes daylight saving time at a reference instant.
4
6
  *
5
- * - Compares UTC offsets at two dates six months apart (January and July).
6
- * - A zone is considered to have DST if its offset differs between the two dates.
7
- * - Returns false for invalid or unresolvable timeZone identifiers.
7
+ * - True when the zone is in daylight time at the reference instant, or a daylight period begins
8
+ * less than 365 days after it. So a zone in its winter is true, and a zone that has stopped
9
+ * changing its clocks is false.
10
+ * - With `options.at` the answer does not depend on the day the code runs.
11
+ * - The rule is GMT's own definition, not the tz database's daylight flag, which no JavaScript
12
+ * API exposes: daylight time runs from a forward change of the zone's clocks to the backward
13
+ * change of the same size that undoes it, less than 365 days later.
14
+ * - Read as standard time, because the offsets do not show otherwise: the last summer before a
15
+ * zone kept its daylight offset for good; a daylight period held 365 days or longer; one that
16
+ * began, ended or was interrupted by a move of standard time, so the offset changes part-way
17
+ * through and the rest, or all, of it is not paired (`Asia/Tomsk` 2002); and one whose end is
18
+ * past the last instant Temporal can represent.
19
+ * - A forward change never undone is a change of standard time: `Europe/Istanbul` is false from
20
+ * 2016 on, although its clocks went forward in March 2016.
21
+ * - Read from the runtime's time zone data, so the answer can change when that data does.
22
+ * - Returns false for an invalid timeZone, an invalid `at`, an options argument that is not an
23
+ * object, and a fixed offset.
8
24
  *
9
25
  * @param timeZone timeZone identifier to check
10
- * @returns boolean indicating whether the timeZone observes DST
26
+ * @param options optional setting for the reference instant
27
+ * @returns boolean indicating whether the timeZone observes DST, or false on invalid input
11
28
  *
12
- * @example hasDaylightSaving("America/New_York") // true
13
- * @example hasDaylightSaving("Europe/Berlin") // true
14
- * @example hasDaylightSaving("Asia/Tokyo") // false
15
- * @example hasDaylightSaving("UTC") // false
16
- * @example hasDaylightSaving("Invalid/Zone") // false
29
+ * @example hasDaylightSaving("America/New_York", { at: "2024-01-15T12:00:00Z" }) // true
30
+ * @example hasDaylightSaving("Australia/Sydney", { at: "2024-06-15T12:00:00Z" }) // true (winter; the next period begins in October)
31
+ * @example hasDaylightSaving("Asia/Tokyo", { at: "2024-01-15T12:00:00Z" }) // false
32
+ * @example hasDaylightSaving("Europe/Istanbul", { at: "2015-06-15T12:00:00Z" }) // true
33
+ * @example hasDaylightSaving("Europe/Istanbul", { at: "2016-06-15T12:00:00Z" }) // false (the March 2016 advance was never undone)
34
+ * @example hasDaylightSaving("America/Sao_Paulo", { at: "2018-06-15T12:00:00Z" }) // true
35
+ * @example hasDaylightSaving("America/Sao_Paulo", { at: "2019-06-15T12:00:00Z" }) // false (last daylight period ended 2019-02-17)
36
+ * @example hasDaylightSaving("UTC", { at: "2024-01-15T12:00:00Z" }) // false
37
+ * @example hasDaylightSaving("+05:00", { at: "2024-01-15T12:00:00Z" }) // false
38
+ * @example hasDaylightSaving("Invalid/Zone", { at: "2024-01-15T12:00:00Z" }) // false
39
+ * @example hasDaylightSaving("America/New_York", { at: "2024-01-15" }) // false (not an instant)
17
40
  */
18
- export function hasDaylightSaving(timeZone) {
41
+ export function hasDaylightSaving(timeZone, options) {
42
+ if (!isValidTimeZone(timeZone) || !isOptionsArgument(options)) {
43
+ return false;
44
+ }
19
45
  try {
20
- const zdtJanuary = zonedDateTimeFrom({
21
- year: 2024,
22
- month: 1,
23
- day: 15,
24
- hour: 12,
25
- minute: 0,
26
- second: 0,
27
- timeZone,
28
- });
29
- const zdtJuly = zonedDateTimeFrom({
30
- year: 2024,
31
- month: 7,
32
- day: 15,
33
- hour: 12,
34
- minute: 0,
35
- second: 0,
36
- timeZone,
37
- });
38
- return zdtJanuary.offsetNanoseconds !== zdtJuly.offsetNanoseconds;
46
+ const at = options?.at;
47
+ if (at === undefined) {
48
+ return observesDaylightTime(Temporal.Now.zonedDateTimeISO(timeZone));
49
+ }
50
+ const epochNanoseconds = parseInstantNanoseconds(at);
51
+ if (epochNanoseconds === null) {
52
+ return false;
53
+ }
54
+ return observesDaylightTime(Temporal.Instant.fromEpochNanoseconds(epochNanoseconds).toZonedDateTimeISO(timeZone));
39
55
  }
40
56
  catch {
41
57
  return false;
@@ -6,7 +6,15 @@
6
6
  * space or lower-case `t` separator, a lower-case `z`, an hour-only time or offset, and a date
7
7
  * without a time are rejected, although `Temporal.ZonedDateTime.from` reads them.
8
8
  * - Uses Temporal.ZonedDateTime.from for validation.
9
+ * - A written offset must agree with the bracketed zone, as TC39 `ToTemporalZonedDateTime`
10
+ * matches it: an offset written to the minute may be the zone's sub-minute offset rounded
11
+ * (`-00:45[Africa/Monrovia]` for −00:44:30, which is how Temporal writes it), and an offset
12
+ * written with seconds must be the zone's offset exactly.
9
13
  * - Rejects leap seconds.
14
+ * - With an offset, the local date must be inside Temporal's date range, as
15
+ * `Temporal.ZonedDateTime.from` requires (`CheckISODaysRange`): a zoned string on
16
+ * −271821-04-19, which a zone west of Greenwich shows for the first hours of the instant
17
+ * range, is rejected although `isValidInstant` accepts it.
10
18
  * - Reads RFC 9557 annotations as `Temporal.ZonedDateTime.from` does: elective ones
11
19
  * (`[foo=bar]`) are ignored and an unknown critical one (`[!foo=bar]`) is rejected.
12
20
  * - The calendar must be ISO: `[u-ca=iso8601]` is accepted, and a non-ISO calendar annotation is
@@ -24,6 +32,11 @@
24
32
  * @example isValidZonedDateTime("20241003T143000-0400[America/New_York]") // false (basic format)
25
33
  * @example isValidZonedDateTime("2024-10-03 14:30:00-04:00[America/New_York]") // false (space separator)
26
34
  * @example isValidZonedDateTime("2024-10-03[America/New_York]") // false (no time)
35
+ * @example isValidZonedDateTime("2024-10-03T14:30:00-05:00[America/New_York]") // false (New York is -04:00 in October)
36
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:45[Africa/Monrovia]") // true (-00:45 is Monrovia's -00:44:30, rounded)
37
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:44:30[Africa/Monrovia]") // true
38
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:45:00[Africa/Monrovia]") // false (an offset with seconds must be exact)
39
+ * @example isValidZonedDateTime("-271821-04-19T23:59:00-00:01[Europe/London]") // false (the local date is before Temporal's date range)
27
40
  * @example isValidZonedDateTime("invalid") // false
28
41
  */
29
42
  export declare function isValidZonedDateTime(value: string): boolean;
@@ -1,5 +1,5 @@
1
- import { zonedDateTimeFrom } from "../../internal/index.js";
2
1
  import { hasZonedDateTimeShape } from "../../internal/isoStringBody.js";
2
+ import { zonedDateTimeFrom } from "../../internal/zonedWallClock.js";
3
3
  import { isLeapSecond } from "../../plain/validate/isLeapSecond.js";
4
4
  /**
5
5
  * Validate whether a string is a valid ISO 8601 zoned datetime string.
@@ -9,7 +9,15 @@ import { isLeapSecond } from "../../plain/validate/isLeapSecond.js";
9
9
  * space or lower-case `t` separator, a lower-case `z`, an hour-only time or offset, and a date
10
10
  * without a time are rejected, although `Temporal.ZonedDateTime.from` reads them.
11
11
  * - Uses Temporal.ZonedDateTime.from for validation.
12
+ * - A written offset must agree with the bracketed zone, as TC39 `ToTemporalZonedDateTime`
13
+ * matches it: an offset written to the minute may be the zone's sub-minute offset rounded
14
+ * (`-00:45[Africa/Monrovia]` for −00:44:30, which is how Temporal writes it), and an offset
15
+ * written with seconds must be the zone's offset exactly.
12
16
  * - Rejects leap seconds.
17
+ * - With an offset, the local date must be inside Temporal's date range, as
18
+ * `Temporal.ZonedDateTime.from` requires (`CheckISODaysRange`): a zoned string on
19
+ * −271821-04-19, which a zone west of Greenwich shows for the first hours of the instant
20
+ * range, is rejected although `isValidInstant` accepts it.
13
21
  * - Reads RFC 9557 annotations as `Temporal.ZonedDateTime.from` does: elective ones
14
22
  * (`[foo=bar]`) are ignored and an unknown critical one (`[!foo=bar]`) is rejected.
15
23
  * - The calendar must be ISO: `[u-ca=iso8601]` is accepted, and a non-ISO calendar annotation is
@@ -27,6 +35,11 @@ import { isLeapSecond } from "../../plain/validate/isLeapSecond.js";
27
35
  * @example isValidZonedDateTime("20241003T143000-0400[America/New_York]") // false (basic format)
28
36
  * @example isValidZonedDateTime("2024-10-03 14:30:00-04:00[America/New_York]") // false (space separator)
29
37
  * @example isValidZonedDateTime("2024-10-03[America/New_York]") // false (no time)
38
+ * @example isValidZonedDateTime("2024-10-03T14:30:00-05:00[America/New_York]") // false (New York is -04:00 in October)
39
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:45[Africa/Monrovia]") // true (-00:45 is Monrovia's -00:44:30, rounded)
40
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:44:30[Africa/Monrovia]") // true
41
+ * @example isValidZonedDateTime("1960-01-01T00:20:00-00:45:00[Africa/Monrovia]") // false (an offset with seconds must be exact)
42
+ * @example isValidZonedDateTime("-271821-04-19T23:59:00-00:01[Europe/London]") // false (the local date is before Temporal's date range)
30
43
  * @example isValidZonedDateTime("invalid") // false
31
44
  */
32
45
  export function isValidZonedDateTime(value) {
@@ -5,16 +5,13 @@
5
5
  * - Both inputs must be valid ISO 8601 zoned datetime strings in extended format, as
6
6
  * `isValidZonedDateTime` requires: basic format, a space or lower-case `t` separator, a
7
7
  * lower-case `z` and a date without a time return `false`.
8
- * - Equal `value1 === value2` is valid when `options.allowEqual` is true.
9
8
  * - Comparison is done by instant, so intervals spanning DST transitions are compared
10
9
  * by absolute time.
11
10
  * - Invalid input, malformed strings, or leap-second strings return `false`.
12
11
  * - Annotations are read as `isValidZonedDateTime` reads them: elective ones are ignored,
13
12
  * `[u-ca=iso8601]` is accepted, and a non-ISO calendar on either endpoint returns `false`.
14
13
  *
15
- * @param value1 first ISO ZonedDateTime string
16
- * @param value2 second ISO ZonedDateTime string
17
- * @param options optional allowEqual flag
14
+ * @param props the two endpoints of the range and its optional settings
18
15
  * @returns boolean indicating whether the zoned range is valid
19
16
  *
20
17
  * @example isValidZonedRange({ value1: "2024-01-01T10:00:00+00:00[UTC]", value2: "2024-12-31T23:59:59+00:00[UTC]" }) // true
@@ -25,9 +22,23 @@
25
22
  * @example isValidZonedRange({ value1: "2024-01-01 10:00:00+00:00[UTC]", value2: "2024-12-31T23:59:59+00:00[UTC]" }) // false (space separator)
26
23
  */
27
24
  export declare function isValidZonedRange(props: {
25
+ /** The start of the range, as an ISO 8601 zoned datetime string. */
28
26
  value1: string;
27
+ /** The end of the range, as an ISO 8601 zoned datetime string. */
29
28
  value2: string;
29
+ /**
30
+ * The settings for the comparison. It must be an object or omitted; any other value, `null`
31
+ * included, returns `false`.
32
+ *
33
+ * @defaultValue None. Two values at the same instant are not a valid range.
34
+ */
30
35
  options?: {
36
+ /**
37
+ * Whether `value1` at the same instant as `value2` is a valid range. `false` requires `value1`
38
+ * to be before `value2`.
39
+ *
40
+ * @defaultValue `false`
41
+ */
31
42
  allowEqual?: boolean;
32
43
  };
33
44
  }): boolean;
@@ -10,16 +10,13 @@ import { hasZonedDateTimeShape } from "../../internal/isoStringBody.js";
10
10
  * - Both inputs must be valid ISO 8601 zoned datetime strings in extended format, as
11
11
  * `isValidZonedDateTime` requires: basic format, a space or lower-case `t` separator, a
12
12
  * lower-case `z` and a date without a time return `false`.
13
- * - Equal `value1 === value2` is valid when `options.allowEqual` is true.
14
13
  * - Comparison is done by instant, so intervals spanning DST transitions are compared
15
14
  * by absolute time.
16
15
  * - Invalid input, malformed strings, or leap-second strings return `false`.
17
16
  * - Annotations are read as `isValidZonedDateTime` reads them: elective ones are ignored,
18
17
  * `[u-ca=iso8601]` is accepted, and a non-ISO calendar on either endpoint returns `false`.
19
18
  *
20
- * @param value1 first ISO ZonedDateTime string
21
- * @param value2 second ISO ZonedDateTime string
22
- * @param options optional allowEqual flag
19
+ * @param props the two endpoints of the range and its optional settings
23
20
  * @returns boolean indicating whether the zoned range is valid
24
21
  *
25
22
  * @example isValidZonedRange({ value1: "2024-01-01T10:00:00+00:00[UTC]", value2: "2024-12-31T23:59:59+00:00[UTC]" }) // true