@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
@@ -1,19 +1,40 @@
1
1
  import { isValidZonedDateTime } from "../validate/index.js";
2
- import { zonedDateTimeFrom } from "../../internal/index.js";
2
+ import { isInDaylightTime, zonedDateTimeFrom } from "../../internal/index.js";
3
3
  /**
4
4
  * Check whether a zoned value's instant falls within daylight saving time.
5
5
  *
6
- * - The third DST-related function in the roadmap, and distinct from the
7
- * other two — see docs/dst-disambiguation.md for the full four-way split:
8
- * `hasDaylightSaving(timeZone)` asks whether a zone observes DST *at all*
9
- * (zone-level, no instant); `listDstTransitions(timeZone, year)` asks
10
- * *where* a zone's transitions fall (enumerates instants);
11
- * `isInDaylightSaving(value)` asks whether *this particular instant* is
12
- * currently in DST. `disambiguation`/`offset` (Group C) are a fourth,
13
- * orthogonal concern: what to do when construction lands on an ambiguous
14
- * or nonexistent instant.
15
- * - Returns false for invalid input, and false for a zone that doesn't
16
- * observe DST at all.
6
+ * - The rule is GMT's own definition, not the tz database's daylight flag. No JavaScript API
7
+ * exposes that flag, and it cannot be worked out from offsets.
8
+ * - The rule: daylight time runs from a forward change of the zone's clocks to the backward
9
+ * change that undoes it. A backward change undoes the most recent forward change of the same
10
+ * size not yet undone, if it comes less than 365 days after it. The instant is in daylight
11
+ * time when it is at or after such a forward change and before its backward change.
12
+ * - Read from the zone's offset changes in the runtime's time zone data
13
+ * (`getTimeZoneTransition`); GMT holds no zone data. The answer changes only at a clock
14
+ * change, and the answer for a past instant can change when the runtime's data learns that a
15
+ * zone stopped changing its clocks.
16
+ * - A forward change never undone, or undone 365 days or more later, is a change of standard
17
+ * time: `Europe/Istanbul` is on standard time from its last advance in March 2016.
18
+ * - The higher of two alternating offsets is the daylight one, as in the tz database's rearguard
19
+ * form. Its main form reverses `Europe/Dublin` (winter is its daylight time, a negative save)
20
+ * and `Africa/Casablanca` (the Ramadan weeks are); here Dublin's summer and Casablanca's
21
+ * months at `+01:00` are daylight time.
22
+ * - Read as standard time, because the offsets do not show otherwise:
23
+ * - the last summer before a zone kept its daylight offset for good (the tz database dates
24
+ * Istanbul's switch 2016-09-07, with no clock change);
25
+ * - a daylight period held 365 days or longer (`America/Santiago` 2014 to 2016);
26
+ * - a daylight period that began, ended or was interrupted by a move of standard time, so the
27
+ * clocks went back by another amount or not at all (`America/Kentucky/Monticello` 2000), or
28
+ * the offset changed part-way through and the rest, or all, of the period is not paired
29
+ * (`Asia/Tomsk` 2002, `Asia/Jerusalem` 1948);
30
+ * - a daylight period whose end is past the last instant Temporal can represent.
31
+ * - Read as daylight time: a move of standard time reversed by the same amount less than 365
32
+ * days later (`America/Metlakatla` 2018 to 2019).
33
+ * - The other DST functions answer other questions: `hasDaylightSaving(timeZone, { at })` whether
34
+ * a zone observes DST at an instant, `getDstTransitions(timeZone, year)` where its offset
35
+ * changes fall, and `classifyLocal` whether a wall time is ambiguous. See
36
+ * docs/dst-disambiguation.md.
37
+ * - Returns false for invalid input, and for a zone with a fixed offset.
17
38
  *
18
39
  * @param value zoned ISO 8601 datetime string
19
40
  * @returns true if the instant is in daylight saving time, false otherwise or on invalid input
@@ -22,6 +43,12 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
22
43
  * @example isInDaylightSaving("2024-01-15T12:00:00-05:00[America/New_York]") // false
23
44
  * @example isInDaylightSaving("2024-01-15T12:00:00+11:00[Australia/Sydney]") // true (southern-hemisphere summer)
24
45
  * @example isInDaylightSaving("2024-07-15T12:00:00+09:00[Asia/Tokyo]") // false (Asia/Tokyo has no DST)
46
+ * @example isInDaylightSaving("2015-07-01T12:00:00+03:00[Europe/Istanbul]") // true (undone 2015-11-08)
47
+ * @example isInDaylightSaving("2016-07-01T12:00:00+03:00[Europe/Istanbul]") // false (the March 2016 advance was never undone)
48
+ * @example isInDaylightSaving("2016-12-01T12:00:00+03:00[Europe/Istanbul]") // false (permanent +03:00)
49
+ * @example isInDaylightSaving("2019-07-15T12:00:00+01:00[Europe/Dublin]") // true
50
+ * @example isInDaylightSaving("2019-12-01T12:00:00+01:00[Africa/Casablanca]") // true (put back 2020-04-19)
51
+ * @example isInDaylightSaving("2019-07-15T12:00:00+00:00[UTC]") // false
25
52
  * @example isInDaylightSaving("invalid") // false
26
53
  */
27
54
  export function isInDaylightSaving(value) {
@@ -29,38 +56,7 @@ export function isInDaylightSaving(value) {
29
56
  return false;
30
57
  }
31
58
  try {
32
- const zonedDateTime = zonedDateTimeFrom(value);
33
- const { timeZoneId: timeZone, year } = zonedDateTime;
34
- // Sample the zone's offset 6 months apart, within the same calendar year
35
- // as `value` (a zone's DST rules can change between years). DST always
36
- // shifts a zone's clocks forward relative to its own standard time, in
37
- // every hemisphere, so whichever of these two offsets is smaller is
38
- // "standard" — regardless of whether the zone's DST season falls in the
39
- // Jan or Jul half of the year. This mirrors `hasDaylightSaving`'s
40
- // Jan/Jul sampling, but anchored to `value`'s own year rather than a
41
- // fixed reference year, and doesn't attempt to detect a zone whose
42
- // standard offset itself changed permanently mid-year (rare, and H3
43
- // shares the same limitation).
44
- const januaryOffsetNanoseconds = zonedDateTimeFrom({
45
- year,
46
- month: 1,
47
- day: 15,
48
- hour: 12,
49
- minute: 0,
50
- second: 0,
51
- timeZone,
52
- }).offsetNanoseconds;
53
- const julyOffsetNanoseconds = zonedDateTimeFrom({
54
- year,
55
- month: 7,
56
- day: 15,
57
- hour: 12,
58
- minute: 0,
59
- second: 0,
60
- timeZone,
61
- }).offsetNanoseconds;
62
- const standardOffsetNanoseconds = Math.min(januaryOffsetNanoseconds, julyOffsetNanoseconds);
63
- return zonedDateTime.offsetNanoseconds > standardOffsetNanoseconds;
59
+ return isInDaylightTime(zonedDateTimeFrom(value));
64
60
  }
65
61
  catch {
66
62
  return false;
@@ -4,17 +4,15 @@ import type { Disambiguation } from "../../types/index.js";
4
4
  * Attach the specified `timeZone` to a plain datetime string and return a zoned ISO 8601 datetime string.
5
5
  *
6
6
  * - Combines plain datetime with timezone to create ZonedDateTime.
7
- * - `disambiguation` controls DST gap/overlap resolution: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
8
7
  * - There is no `offset` option (removed in 1.16.0): Temporal `PlainDateTime#toZonedDateTime` reads
9
8
  * only `disambiguation`, and a plain datetime has no UTC offset for `offset` to act on.
10
- * - **Output is cut to milliseconds by default.** `smallestUnit` defaults to `"milliseconds"`
11
- * (Temporal `toString` rounding mode `"trunc"`), so microseconds and nanoseconds in `value` are
9
+ * - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
12
10
  * dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
13
11
  * - Returns "" for invalid input.
14
12
  *
15
13
  * @param value plain datetime string (e.g. "2024-02-29T14:30:45")
16
- * @param timeZone IANA timeZone identifier
17
- * @param optionsArg optional: smallestUnit, disambiguation ("compatible" | "earlier" | "later" | "reject")
14
+ * @param timeZone IANA name or UTC offset
15
+ * @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
18
16
  * @returns zoned ISO 8601 datetime string or "" when invalid
19
17
  *
20
18
  * @example convertPlainDateTimeToZoned("2024-02-29T14:30:45", "America/New_York") // "2024-02-29T14:30:45.000-05:00[America/New_York]"
@@ -26,6 +24,21 @@ import type { Disambiguation } from "../../types/index.js";
26
24
  * @example convertPlainDateTimeToZoned("2024-03-10T02:30:00", "America/New_York", { disambiguation: "reject" }) // ""
27
25
  */
28
26
  export declare function convertPlainDateTimeToZoned(value: string, timeZone: string, optionsArg?: {
27
+ /**
28
+ * The smallest unit written in the output string, from `"minute"` to `"nanosecond"`, singular
29
+ * or plural. Anything smaller is truncated, as Temporal's `toString` does with its `"trunc"`
30
+ * rounding mode.
31
+ *
32
+ * @defaultValue `"milliseconds"`
33
+ */
29
34
  smallestUnit?: Temporal.ZonedDateTimeToStringOptions["smallestUnit"];
35
+ /**
36
+ * How `value` resolves when its wall-clock time falls in a DST gap or overlap in `timeZone`. In
37
+ * a fall-back overlap `"compatible"` and `"earlier"` take the earlier instant and `"later"` the
38
+ * later one; in a spring-forward gap `"compatible"` and `"later"` move the wall clock forward
39
+ * by the gap length and `"earlier"` back by it. `"reject"` returns `""` for both.
40
+ *
41
+ * @defaultValue `"compatible"`, Temporal's default.
42
+ */
30
43
  disambiguation?: Disambiguation;
31
44
  }): string;
@@ -3,21 +3,20 @@ import { isValidDateTime } from "../../plain/validate/index.js";
3
3
  import { isValidTimeZone } from "../validate/index.js";
4
4
  import { isoStringBody, zonedDateTimeFrom } from "../../internal/index.js";
5
5
  import { isOptionsArgument } from "../../internal/isObject.js";
6
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
6
7
  /**
7
8
  * Attach the specified `timeZone` to a plain datetime string and return a zoned ISO 8601 datetime string.
8
9
  *
9
10
  * - Combines plain datetime with timezone to create ZonedDateTime.
10
- * - `disambiguation` controls DST gap/overlap resolution: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
11
11
  * - There is no `offset` option (removed in 1.16.0): Temporal `PlainDateTime#toZonedDateTime` reads
12
12
  * only `disambiguation`, and a plain datetime has no UTC offset for `offset` to act on.
13
- * - **Output is cut to milliseconds by default.** `smallestUnit` defaults to `"milliseconds"`
14
- * (Temporal `toString` rounding mode `"trunc"`), so microseconds and nanoseconds in `value` are
13
+ * - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
15
14
  * dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
16
15
  * - Returns "" for invalid input.
17
16
  *
18
17
  * @param value plain datetime string (e.g. "2024-02-29T14:30:45")
19
- * @param timeZone IANA timeZone identifier
20
- * @param optionsArg optional: smallestUnit, disambiguation ("compatible" | "earlier" | "later" | "reject")
18
+ * @param timeZone IANA name or UTC offset
19
+ * @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
21
20
  * @returns zoned ISO 8601 datetime string or "" when invalid
22
21
  *
23
22
  * @example convertPlainDateTimeToZoned("2024-02-29T14:30:45", "America/New_York") // "2024-02-29T14:30:45.000-05:00[America/New_York]"
@@ -36,13 +35,9 @@ export function convertPlainDateTimeToZoned(value, timeZone, optionsArg) {
36
35
  if (!isValidDateTime(value) || !isValidTimeZone(timeZone)) {
37
36
  return "";
38
37
  }
39
- const disambiguation = optionsArg?.disambiguation === undefined
40
- ? "compatible"
41
- : optionsArg.disambiguation;
38
+ const disambiguation = optionOrDefault(optionsArg?.disambiguation, "compatible");
42
39
  const options = {
43
- smallestUnit: optionsArg?.smallestUnit === undefined
44
- ? "milliseconds"
45
- : optionsArg.smallestUnit,
40
+ smallestUnit: optionOrDefault(optionsArg?.smallestUnit, "milliseconds"),
46
41
  };
47
42
  try {
48
43
  const zonedDateTime = zonedDateTimeFrom(`${isoStringBody(value)}[${timeZone}]`, { disambiguation });
@@ -4,13 +4,11 @@ import type { UnixUnit } from "../../unix/validate/isValidUnixUnit.js";
4
4
  *
5
5
  * - Uses Temporal.ZonedDateTime.toInstant to convert.
6
6
  * - Seconds floor toward −∞, as POSIX `time_t` counts whole elapsed seconds.
7
- * - `options.epochUnit` is `"seconds"` or `"milliseconds"` (singular accepted), default
8
- * `"milliseconds"`. An explicit `undefined` is the same as omitted; a non-object `options` (such
9
- * as a bare `"seconds"` string) returns null.
7
+ * - A non-object `options` (such as a bare `"seconds"` string) returns null.
10
8
  * - Returns null for invalid input.
11
9
  *
12
10
  * @param value zoned ISO 8601 datetime string
13
- * @param options optional: epochUnit ("seconds" | "milliseconds", singular accepted; default "milliseconds")
11
+ * @param options optional setting for the unit of the returned epoch value
14
12
  * @returns epoch number or null on invalid
15
13
  *
16
14
  * @example convertZonedToUnix("2024-02-29T12:34:56.789+00:00[UTC]") // 1709210096789
@@ -19,5 +17,12 @@ import type { UnixUnit } from "../../unix/validate/isValidUnixUnit.js";
19
17
  * @example convertZonedToUnix("invalid") // null
20
18
  */
21
19
  export declare function convertZonedToUnix(value: string, options?: {
20
+ /**
21
+ * The unit the epoch value is returned in: `"milliseconds"` or `"seconds"`, each also accepted
22
+ * in its singular form. An explicit `undefined` is the same as omitted; any other value returns
23
+ * null.
24
+ *
25
+ * @defaultValue `"milliseconds"`
26
+ */
22
27
  epochUnit?: UnixUnit;
23
28
  }): number | null;
@@ -6,13 +6,11 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
6
6
  *
7
7
  * - Uses Temporal.ZonedDateTime.toInstant to convert.
8
8
  * - Seconds floor toward −∞, as POSIX `time_t` counts whole elapsed seconds.
9
- * - `options.epochUnit` is `"seconds"` or `"milliseconds"` (singular accepted), default
10
- * `"milliseconds"`. An explicit `undefined` is the same as omitted; a non-object `options` (such
11
- * as a bare `"seconds"` string) returns null.
9
+ * - A non-object `options` (such as a bare `"seconds"` string) returns null.
12
10
  * - Returns null for invalid input.
13
11
  *
14
12
  * @param value zoned ISO 8601 datetime string
15
- * @param options optional: epochUnit ("seconds" | "milliseconds", singular accepted; default "milliseconds")
13
+ * @param options optional setting for the unit of the returned epoch value
16
14
  * @returns epoch number or null on invalid
17
15
  *
18
16
  * @example convertZonedToUnix("2024-02-29T12:34:56.789+00:00[UTC]") // 1709210096789
@@ -5,7 +5,7 @@
5
5
  * - Returns "" for invalid input.
6
6
  *
7
7
  * @param value zoned ISO 8601 datetime string
8
- * @param timeZone target IANA timeZone identifier
8
+ * @param timeZone target IANA name or UTC offset
9
9
  * @returns zoned ISO 8601 string in target timeZone or "" when invalid
10
10
  *
11
11
  * @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
@@ -7,7 +7,7 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
7
7
  * - Returns "" for invalid input.
8
8
  *
9
9
  * @param value zoned ISO 8601 datetime string
10
- * @param timeZone target IANA timeZone identifier
10
+ * @param timeZone target IANA name or UTC offset
11
11
  * @returns zoned ISO 8601 string in target timeZone or "" when invalid
12
12
  *
13
13
  * @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
@@ -1,19 +1,25 @@
1
+ /**
2
+ * Options for `formatCalendarZoned`: the moment the day label is measured from and the length of
3
+ * the time-of-day half.
4
+ */
1
5
  export interface FormatCalendarZonedOptions {
2
6
  /**
3
- * Anchor point for the relative diff.
7
+ * The instant the day label is measured from, as a zoned ISO string, a UTC ISO string or a
8
+ * numeric epoch in milliseconds. Whatever its form, it is converted into `value`'s own time zone
9
+ * before calendar days are compared, because a day label needs one zone's wall clock and
10
+ * `value`'s zone is whose "today" is being described. Any other value returns `""`.
4
11
  *
5
- * - ZonedDateTime ISO string: converted into `value`'s own zone before
6
- * comparing calendar days. Unlike `formatRelativeZoned`'s `reference`
7
- * (which keeps a ZonedDateTime reference in its own zone for
8
- * elapsed-time diffing), a calendar *label* is meaningless without
9
- * picking one zone's wall clock — `value`'s zone is the natural choice,
10
- * since that is whose "today" is being described.
11
- * - UTC ISO string or numeric epoch (ms): placed into `value`'s timezone.
12
- * - Omitted: "now" in `value`'s own timezone.
12
+ * @defaultValue The current instant, read in `value`'s time zone.
13
13
  */
14
14
  reference?: string | number;
15
- /** `Intl.DateTimeFormatOptions` `timeStyle` for the time-of-day half. */
16
- timeStyle?: "short" | "medium" | "full";
15
+ /**
16
+ * The length of the time-of-day part, as the `timeStyle` of `Intl.DateTimeFormat`. `"short"`
17
+ * writes hours and minutes, `"medium"` adds seconds, `"long"` adds the short time zone name
18
+ * ("EDT") and `"full"` the long one ("Eastern Daylight Time"). Any other value returns `""`.
19
+ *
20
+ * @defaultValue `"short"`
21
+ */
22
+ timeStyle?: "short" | "medium" | "long" | "full";
17
23
  }
18
24
  /**
19
25
  * Format a zoned date-time as a relative day label plus time-of-day, e.g.
@@ -26,7 +32,7 @@ export interface FormatCalendarZonedOptions {
26
32
  *
27
33
  * @param value ZonedDateTime ISO string to format
28
34
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
29
- * @param options optional: { reference, timeStyle }
35
+ * @param options optional settings for the reference moment and the time style
30
36
  * @returns the formatted calendar string, or "" on invalid input
31
37
  *
32
38
  * @example formatCalendarZoned("2026-03-16T14:30:00-04:00[America/New_York]", "en-US", { reference: "2026-03-15T09:00:00-04:00[America/New_York]" }) // "tomorrow at 2:30 PM"
@@ -4,6 +4,7 @@ import { formatCalendarDays } from "../../internal/formatCalendarDays.js";
4
4
  import { isValidUtc } from "../../utc/validate/index.js";
5
5
  import { isValidZonedFormatReference } from "../../internal/zonedFormatReference.js";
6
6
  import { isValidZonedDateTime } from "../validate/index.js";
7
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
7
8
  /**
8
9
  * Format a zoned date-time as a relative day label plus time-of-day, e.g.
9
10
  * "Tomorrow at 2:30 PM" — the zoned counterpart of `formatCalendar`. See
@@ -15,7 +16,7 @@ import { isValidZonedDateTime } from "../validate/index.js";
15
16
  *
16
17
  * @param value ZonedDateTime ISO string to format
17
18
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
18
- * @param options optional: { reference, timeStyle }
19
+ * @param options optional settings for the reference moment and the time style
19
20
  * @returns the formatted calendar string, or "" on invalid input
20
21
  *
21
22
  * @example formatCalendarZoned("2026-03-16T14:30:00-04:00[America/New_York]", "en-US", { reference: "2026-03-15T09:00:00-04:00[America/New_York]" }) // "tomorrow at 2:30 PM"
@@ -32,24 +33,27 @@ export function formatCalendarZoned(value, locale, options = {}) {
32
33
  return "";
33
34
  if (!isValidZonedDateTime(value))
34
35
  return "";
35
- if (!isValidZonedFormatReference(options.reference))
36
+ // Each option is read once (GetOption).
37
+ const referenceOption = options.reference;
38
+ if (!isValidZonedFormatReference(referenceOption))
36
39
  return "";
37
40
  try {
38
41
  const target = zonedDateTimeFrom(value);
39
42
  const timeZone = target.timeZoneId;
40
43
  let reference;
41
- if (options.reference === undefined) {
44
+ if (referenceOption === undefined) {
42
45
  reference = Temporal.Now.zonedDateTimeISO(timeZone);
43
46
  }
44
- else if (typeof options.reference === "string") {
45
- reference = isValidUtc(options.reference)
46
- ? Temporal.Instant.from(options.reference).toZonedDateTimeISO(timeZone)
47
- : zonedDateTimeFrom(options.reference).withTimeZone(timeZone);
47
+ else if (typeof referenceOption === "string") {
48
+ reference = isValidUtc(referenceOption)
49
+ ? Temporal.Instant.from(referenceOption).toZonedDateTimeISO(timeZone)
50
+ : zonedDateTimeFrom(referenceOption).withTimeZone(timeZone);
48
51
  }
49
52
  else {
50
- reference = Temporal.Instant.fromEpochMilliseconds(options.reference).toZonedDateTimeISO(timeZone);
53
+ reference =
54
+ Temporal.Instant.fromEpochMilliseconds(referenceOption).toZonedDateTimeISO(timeZone);
51
55
  }
52
- return formatCalendarDays(target.toPlainDate().since(reference.toPlainDate()).days, target.epochMilliseconds, timeZone, locale, options.timeStyle === undefined ? "short" : options.timeStyle);
56
+ return formatCalendarDays(target.toPlainDate().since(reference.toPlainDate()).days, target.epochMilliseconds, timeZone, locale, optionOrDefault(options.timeStyle, "short"));
53
57
  }
54
58
  catch {
55
59
  return "";
@@ -1,20 +1,48 @@
1
1
  import type { RelativeRoundingMethod, RelativeUnit } from "../../types/index.js";
2
+ /**
3
+ * Options for `formatRelativeZoned`: how the phrase is worded, the unit it counts in, how the
4
+ * count rounds and the moment the distance is measured from.
5
+ */
2
6
  export interface FormatRelativeZonedOptions {
7
+ /**
8
+ * The length of the unit name, as the `style` of `Intl.RelativeTimeFormat`: `"long"` ("in 3
9
+ * months"), `"short"` ("in 3 mo.") or `"narrow"` (the locale's most compact form).
10
+ *
11
+ * @defaultValue `"long"`
12
+ */
3
13
  style?: "long" | "short" | "narrow";
14
+ /**
15
+ * Whether a distance may be written as a word instead of a number, as the `numeric` option of
16
+ * `Intl.RelativeTimeFormat`. `"auto"` uses the locale's word where it has one ("yesterday", "next
17
+ * year"); `"always"` writes the number every time ("1 day ago").
18
+ *
19
+ * @defaultValue `"auto"`
20
+ */
4
21
  numeric?: "always" | "auto";
5
- largestUnit?: RelativeUnit;
22
+ /**
23
+ * The unit the distance is written in, whatever its size: `"second"`, `"minute"`, `"hour"`,
24
+ * `"day"`, `"week"`, `"month"` or `"year"`, singular or plural. Any other value returns `""`.
25
+ * Omitted, the unit is picked from the distance: second under a minute, minute under an hour,
26
+ * hour under a day, day under 7 days, week under 28, month under 365 and year beyond.
27
+ *
28
+ * @defaultValue None. The unit is picked from the distance.
29
+ */
30
+ largestUnit?: RelativeUnit | `${RelativeUnit}s`;
31
+ /**
32
+ * The way a fractional distance becomes the whole number displayed: `"round"` goes to the nearest
33
+ * whole number, `"floor"` down and `"ceil"` up. It applies to the signed value, where a past
34
+ * distance is negative, so `"floor"` turns −1.5 hours into "2 hours ago".
35
+ *
36
+ * @defaultValue `"round"`
37
+ */
6
38
  roundingMethod?: RelativeRoundingMethod;
7
39
  /**
8
- * Anchor point for the relative diff.
40
+ * The instant the distance is measured from, as a zoned ISO string, a UTC ISO string or a numeric
41
+ * epoch in milliseconds. The distance is the exact time between the two instants; the reference's
42
+ * time zone only anchors how months and years are counted, which is its own zone for a zoned
43
+ * string and `value`'s zone for a UTC string or an epoch. Any other value returns `""`.
9
44
  *
10
- * - ZonedDateTime ISO string: kept in its own zone; Temporal handles
11
- * cross-zone diffs correctly. The label is therefore zone-aware — a value
12
- * and reference in different zones can produce a non-zero diff even when
13
- * they describe the same absolute instant.
14
- * - UTC ISO string: placed into `value`'s timezone before diffing so the
15
- * calendar anchor matches the value's wall clock.
16
- * - Numeric epoch (ms): same — placed into `value`'s timezone.
17
- * - Omitted: "now" in `value`'s own timezone.
45
+ * @defaultValue The current instant, read in `value`'s time zone.
18
46
  */
19
47
  reference?: string | number;
20
48
  }
@@ -27,13 +55,14 @@ export interface FormatRelativeZonedOptions {
27
55
  * "3 years ago".
28
56
  * - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
29
57
  * Pass `largestUnit: "day"` to keep a day count.
30
- * - `roundingMethod` controls how the distance rounds to the display unit.
58
+ * - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
59
+ * other value returns `""`.
31
60
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
32
61
  * Temporal's GetOptionsObject rejects it.
33
62
  *
34
63
  * @param value ZonedDateTime ISO string to format
35
64
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
36
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
65
+ * @param options optional settings for the wording, the display unit, rounding and the reference moment
37
66
  * @returns the formatted relative-time string, or "" on invalid input
38
67
  *
39
68
  * @example formatRelativeZoned("2023-12-29T00:00:00+00:00[UTC]", "en-US", { reference: "2024-02-29T00:00:00+00:00[UTC]" }) // "2 months ago"
@@ -13,13 +13,14 @@ import { isValidZonedDateTime } from "../validate/index.js";
13
13
  * "3 years ago".
14
14
  * - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
15
15
  * Pass `largestUnit: "day"` to keep a day count.
16
- * - `roundingMethod` controls how the distance rounds to the display unit.
16
+ * - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
17
+ * other value returns `""`.
17
18
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
18
19
  * Temporal's GetOptionsObject rejects it.
19
20
  *
20
21
  * @param value ZonedDateTime ISO string to format
21
22
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
22
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
23
+ * @param options optional settings for the wording, the display unit, rounding and the reference moment
23
24
  * @returns the formatted relative-time string, or "" on invalid input
24
25
  *
25
26
  * @example formatRelativeZoned("2023-12-29T00:00:00+00:00[UTC]", "en-US", { reference: "2024-02-29T00:00:00+00:00[UTC]" }) // "2 months ago"
@@ -37,12 +38,14 @@ export function formatRelativeZoned(value, locale, options = {}) {
37
38
  return "";
38
39
  if (!isValidZonedDateTime(value))
39
40
  return "";
40
- if (!isValidZonedFormatReference(options.reference))
41
+ // Each option is read once (GetOption).
42
+ const referenceOption = options.reference;
43
+ if (!isValidZonedFormatReference(referenceOption))
41
44
  return "";
42
45
  try {
43
46
  const valueZDT = zonedDateTimeFrom(value);
44
47
  const valueInstant = valueZDT.toInstant();
45
- const refZDT = resolveZonedReference(options.reference, valueZDT.timeZoneId);
48
+ const refZDT = resolveZonedReference(referenceOption, valueZDT.timeZoneId);
46
49
  const diff = valueInstant.since(refZDT.toInstant());
47
50
  // month/year are calendrical and need a relativeTo anchor
48
51
  return formatRelativeDuration(diff, locale, options, (unit) => durationTotal(diff, unit, refZDT));
@@ -5,8 +5,8 @@
5
5
  * - **Fixed grammar, not a display format.** RFC 5322 mandates English
6
6
  * weekday/month abbreviations and a numeric `+HHMM`/`-HHMM` offset
7
7
  * regardless of caller locale — there is no locale-appropriate alternative
8
- * ordering to lose, so this does not conflict with Decision 1's exclusion
9
- * of a general token formatter (see roadmap `issues/J.md`, J13).
8
+ * ordering to lose, so this does not conflict with GMT's exclusion of a
9
+ * general token formatter.
10
10
  * - Uses the input's own UTC offset at that instant (DST-aware); never emits
11
11
  * an obsolete named zone like "GMT" or "EST" on output, only numeric.
12
12
  * - Day, hour, minute, and second are always zero-padded to 2 digits; year
@@ -9,8 +9,8 @@ const NANOSECONDS_PER_MINUTE = 60_000_000_000;
9
9
  * - **Fixed grammar, not a display format.** RFC 5322 mandates English
10
10
  * weekday/month abbreviations and a numeric `+HHMM`/`-HHMM` offset
11
11
  * regardless of caller locale — there is no locale-appropriate alternative
12
- * ordering to lose, so this does not conflict with Decision 1's exclusion
13
- * of a general token formatter (see roadmap `issues/J.md`, J13).
12
+ * ordering to lose, so this does not conflict with GMT's exclusion of a
13
+ * general token formatter.
14
14
  * - Uses the input's own UTC offset at that instant (DST-aware); never emits
15
15
  * an obsolete named zone like "GMT" or "EST" on output, only numeric.
16
16
  * - Day, hour, minute, and second are always zero-padded to 2 digits; year
@@ -8,9 +8,8 @@
8
8
  * `Temporal.ZonedDateTime.prototype.toString()` reproduces by default —
9
9
  * that annotation is *not* valid RFC 3339. This function's only job is to
10
10
  * strip it (`{ timeZoneName: "never" }`), which is exactly the detail a
11
- * caller reaching for "give me RFC 3339" would otherwise miss. (Go/no-go
12
- * recorded in roadmap `issues/J.md` J13: this narrow gap is real; a
13
- * parallel `utc`/`unix` wrapper was *not* added, because
11
+ * caller reaching for "give me RFC 3339" would otherwise miss. (This
12
+ * narrow gap is real; a parallel `utc`/`unix` wrapper was *not* added, because
14
13
  * `Temporal.Instant.prototype.toString()` is already fully RFC 3339
15
14
  * compliant with no bracket to strip — that would be a pure passthrough.)
16
15
  * - **Sub-minute offsets are written in UTC.** `time-numoffset` holds whole minutes, and RFC 3339
@@ -11,9 +11,8 @@ const NANOSECONDS_PER_MINUTE = 60_000_000_000;
11
11
  * `Temporal.ZonedDateTime.prototype.toString()` reproduces by default —
12
12
  * that annotation is *not* valid RFC 3339. This function's only job is to
13
13
  * strip it (`{ timeZoneName: "never" }`), which is exactly the detail a
14
- * caller reaching for "give me RFC 3339" would otherwise miss. (Go/no-go
15
- * recorded in roadmap `issues/J.md` J13: this narrow gap is real; a
16
- * parallel `utc`/`unix` wrapper was *not* added, because
14
+ * caller reaching for "give me RFC 3339" would otherwise miss. (This
15
+ * narrow gap is real; a parallel `utc`/`unix` wrapper was *not* added, because
17
16
  * `Temporal.Instant.prototype.toString()` is already fully RFC 3339
18
17
  * compliant with no bracket to strip — that would be a pure passthrough.)
19
18
  * - **Sub-minute offsets are written in UTC.** `time-numoffset` holds whole minutes, and RFC 3339
@@ -18,7 +18,16 @@
18
18
  * const s: TimeZoneNameStyle = "shortGeneric";
19
19
  */
20
20
  export type TimeZoneNameStyle = "short" | "long" | "shortOffset" | "longOffset" | "shortGeneric" | "longGeneric";
21
+ /** Options for `formatTimeZoneName`: the form the zone name is written in. */
21
22
  export interface FormatTimeZoneNameOptions {
23
+ /**
24
+ * The form of the name, one of `Intl.DateTimeFormat`'s `timeZoneName` values. `"short"` and
25
+ * `"long"` give the abbreviated or full name and `"shortOffset"` and `"longOffset"` the UTC
26
+ * offset, all four for the offset in effect now. `"shortGeneric"` and `"longGeneric"` give a name
27
+ * that does not change with daylight saving.
28
+ *
29
+ * @defaultValue `"long"`
30
+ */
22
31
  style?: TimeZoneNameStyle;
23
32
  }
24
33
  /**
@@ -27,7 +36,7 @@ export interface FormatTimeZoneNameOptions {
27
36
  * - `options.style` covers every `Intl.DateTimeFormatOptions` `timeZoneName`
28
37
  * value: "short" (EST), "long" (Eastern Standard Time), "shortOffset"
29
38
  * (GMT-5), "longOffset" (GMT-05:00), "shortGeneric" (ET), "longGeneric"
30
- * (Eastern Time). Default "long".
39
+ * (Eastern Time).
31
40
  * - "short"/"long"/"shortOffset"/"longOffset" name the zone's *current*
32
41
  * offset — for a DST-observing zone the label flips between standard and
33
42
  * daylight names depending on when this is called, since there's no
@@ -39,9 +48,9 @@ export interface FormatTimeZoneNameOptions {
39
48
  * - Output depends on runtime ICU data.
40
49
  * - Returns "" for an invalid timeZone or locale.
41
50
  *
42
- * @param timeZone IANA timeZone identifier
51
+ * @param timeZone IANA name or UTC offset
43
52
  * @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
44
- * @param options optional: { style } name style, default "long"
53
+ * @param options optional setting for the form of the name
45
54
  * @returns localized zone name, or "" on invalid input
46
55
  *
47
56
  * @example formatTimeZoneName("America/New_York", "en-US", { style: "shortGeneric" }) // "ET"
@@ -2,13 +2,14 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import { resolveRequiredLocale } from "../../internal/resolveLocale.js";
3
3
  import { isValidTimeZone } from "../validate/index.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
5
6
  /**
6
7
  * Return the localized display name for an IANA timeZone.
7
8
  *
8
9
  * - `options.style` covers every `Intl.DateTimeFormatOptions` `timeZoneName`
9
10
  * value: "short" (EST), "long" (Eastern Standard Time), "shortOffset"
10
11
  * (GMT-5), "longOffset" (GMT-05:00), "shortGeneric" (ET), "longGeneric"
11
- * (Eastern Time). Default "long".
12
+ * (Eastern Time).
12
13
  * - "short"/"long"/"shortOffset"/"longOffset" name the zone's *current*
13
14
  * offset — for a DST-observing zone the label flips between standard and
14
15
  * daylight names depending on when this is called, since there's no
@@ -20,9 +21,9 @@ import { isOptionsArgument } from "../../internal/isObject.js";
20
21
  * - Output depends on runtime ICU data.
21
22
  * - Returns "" for an invalid timeZone or locale.
22
23
  *
23
- * @param timeZone IANA timeZone identifier
24
+ * @param timeZone IANA name or UTC offset
24
25
  * @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
25
- * @param options optional: { style } name style, default "long"
26
+ * @param options optional setting for the form of the name
26
27
  * @returns localized zone name, or "" on invalid input
27
28
  *
28
29
  * @example formatTimeZoneName("America/New_York", "en-US", { style: "shortGeneric" }) // "ET"
@@ -45,7 +46,7 @@ export function formatTimeZoneName(timeZone, locale, options) {
45
46
  if (resolvedLocale === null)
46
47
  return "";
47
48
  try {
48
- const style = options?.style === undefined ? "long" : options.style;
49
+ const style = optionOrDefault(options?.style, "long");
49
50
  const formatter = new Intl.DateTimeFormat(resolvedLocale, {
50
51
  timeZone,
51
52
  timeZoneName: style,
@@ -1,6 +1,7 @@
1
1
  import { normalizeDateTime, zonedDateTimeFrom } from "../../internal/index.js";
2
2
  import { instantFormatOptions } from "../../internal/instantFormatOptions.js";
3
3
  import { isValidZonedDateTime } from "../validate/index.js";
4
+ import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
4
5
  /**
5
6
  * Format a zoned ISO 8601 datetime string using the Intl.DateTimeFormat implementation.
6
7
  *
@@ -51,7 +52,7 @@ export function formatZonedDateTime(value, locale, options) {
51
52
  // (GetDateTimeFormat ~any~, ~zoned-date-time~, ~all~), so the requested
52
53
  // fields and widths are kept.
53
54
  const zonedDateTime = zonedDateTimeFrom(value);
54
- const resolved = instantFormatOptions(options ?? {}, zonedDateTime.timeZoneId, "zoned-date-time");
55
+ const resolved = instantFormatOptions(readDateTimeFormatOptions(options), zonedDateTime.timeZoneId, "zoned-date-time");
55
56
  if (resolved === null) {
56
57
  return "";
57
58
  }