@northguild/gmt 1.14.2 → 1.16.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 (1163) hide show
  1. package/README.md +887 -277
  2. package/dist/calendar/business/businessDaysBetween.d.ts +37 -0
  3. package/dist/calendar/business/businessDaysBetween.js +89 -0
  4. package/dist/calendar/business/index.d.ts +7 -0
  5. package/dist/calendar/business/index.js +10 -0
  6. package/dist/calendar/business/mergeCalendars.d.ts +33 -0
  7. package/dist/calendar/business/mergeCalendars.js +68 -0
  8. package/dist/calendar/business/nextBusinessDay.d.ts +30 -0
  9. package/dist/calendar/business/nextBusinessDay.js +39 -0
  10. package/dist/calendar/business/previousBusinessDay.d.ts +30 -0
  11. package/dist/calendar/business/previousBusinessDay.js +39 -0
  12. package/dist/calendar/business/rollDate.d.ts +59 -0
  13. package/dist/calendar/business/rollDate.js +116 -0
  14. package/dist/calendar/calculate/bucketRange.d.ts +49 -0
  15. package/dist/calendar/calculate/bucketRange.js +169 -0
  16. package/dist/calendar/calculate/floorToZone.d.ts +42 -0
  17. package/dist/calendar/calculate/floorToZone.js +62 -0
  18. package/dist/calendar/calculate/getFiscalPeriod.d.ts +64 -0
  19. package/dist/calendar/calculate/getFiscalPeriod.js +96 -0
  20. package/dist/calendar/calculate/getIsoWeekDate.d.ts +35 -0
  21. package/dist/calendar/calculate/getIsoWeekDate.js +41 -0
  22. package/dist/calendar/calculate/getOrdinalDate.d.ts +25 -0
  23. package/dist/calendar/calculate/getOrdinalDate.js +28 -0
  24. package/dist/calendar/calculate/getQuarter.d.ts +36 -0
  25. package/dist/calendar/calculate/getQuarter.js +64 -0
  26. package/dist/calendar/calculate/index.d.ts +6 -0
  27. package/dist/calendar/calculate/index.js +6 -0
  28. package/dist/calendar/index.d.ts +4 -0
  29. package/dist/calendar/index.js +5 -0
  30. package/dist/calendar/validate/index.d.ts +4 -0
  31. package/dist/calendar/validate/index.js +4 -0
  32. package/dist/calendar/validate/isValidBusinessCalendar.d.ts +31 -0
  33. package/dist/calendar/validate/isValidBusinessCalendar.js +40 -0
  34. package/dist/calendar/validate/isValidFiscalPattern.d.ts +25 -0
  35. package/dist/calendar/validate/isValidFiscalPattern.js +29 -0
  36. package/dist/calendar/validate/isValidRollConvention.d.ts +28 -0
  37. package/dist/calendar/validate/isValidRollConvention.js +38 -0
  38. package/dist/calendar/validate/isValidZoneBucketUnit.d.ts +31 -0
  39. package/dist/calendar/validate/isValidZoneBucketUnit.js +39 -0
  40. package/dist/duration/calculate/durationAs.d.ts +27 -3
  41. package/dist/duration/calculate/durationAs.js +34 -8
  42. package/dist/duration/calculate/getDurationUnit.d.ts +5 -2
  43. package/dist/duration/calculate/getDurationUnit.js +7 -3
  44. package/dist/duration/compare/compareDurations.d.ts +25 -2
  45. package/dist/duration/compare/compareDurations.js +31 -7
  46. package/dist/duration/format/formatDuration.d.ts +14 -5
  47. package/dist/duration/format/formatDuration.js +47 -11
  48. package/dist/duration/index.d.ts +1 -0
  49. package/dist/duration/index.js +2 -0
  50. package/dist/duration/normalize/normalizeDuration.d.ts +33 -6
  51. package/dist/duration/normalize/normalizeDuration.js +41 -12
  52. package/dist/duration/parse/parseDuration.js +4 -0
  53. package/dist/index.d.ts +6 -0
  54. package/dist/index.js +6 -0
  55. package/dist/instant/convert/classifyLocal.d.ts +50 -0
  56. package/dist/instant/convert/classifyLocal.js +60 -0
  57. package/dist/instant/convert/fromOffsetInstant.d.ts +47 -0
  58. package/dist/instant/convert/fromOffsetInstant.js +99 -0
  59. package/dist/instant/convert/index.d.ts +4 -0
  60. package/dist/instant/convert/index.js +4 -0
  61. package/dist/instant/convert/resolveLocal.d.ts +40 -0
  62. package/dist/instant/convert/resolveLocal.js +76 -0
  63. package/dist/instant/convert/toOffsetInstant.d.ts +73 -0
  64. package/dist/instant/convert/toOffsetInstant.js +185 -0
  65. package/dist/instant/index.d.ts +2 -0
  66. package/dist/instant/index.js +3 -0
  67. package/dist/internal/adjustZonedBusinessDays.js +9 -7
  68. package/dist/internal/businessCalendar.d.ts +46 -0
  69. package/dist/internal/businessCalendar.js +230 -0
  70. package/dist/internal/businessDayValues.d.ts +20 -0
  71. package/dist/internal/businessDayValues.js +54 -0
  72. package/dist/internal/calendarDatePairPolicy.d.ts +10 -12
  73. package/dist/internal/calendarDatePairPolicy.js +13 -19
  74. package/dist/internal/calendarDateString.d.ts +32 -58
  75. package/dist/internal/calendarDateString.js +51 -93
  76. package/dist/internal/calendarSystemIds.d.ts +26 -2
  77. package/dist/internal/calendarSystemIds.js +57 -51
  78. package/dist/internal/calendarValueOfDate.d.ts +10 -12
  79. package/dist/internal/calendarValueOfDate.js +22 -20
  80. package/dist/internal/calendarValueOfZoned.d.ts +14 -17
  81. package/dist/internal/calendarValueOfZoned.js +25 -25
  82. package/dist/internal/calendarZonedPairPolicy.d.ts +11 -18
  83. package/dist/internal/calendarZonedPairPolicy.js +14 -25
  84. package/dist/internal/calendarZonedString.d.ts +41 -65
  85. package/dist/internal/calendarZonedString.js +52 -101
  86. package/dist/internal/compareUnixEpochs.d.ts +14 -0
  87. package/dist/internal/compareUnixEpochs.js +25 -0
  88. package/dist/internal/dateTimeUnitHelpers.d.ts +18 -0
  89. package/dist/internal/dateTimeUnitHelpers.js +27 -0
  90. package/dist/internal/dateUnitHelpers.d.ts +39 -1
  91. package/dist/internal/dateUnitHelpers.js +73 -11
  92. package/dist/internal/defaultFractionalDigits.d.ts +14 -0
  93. package/dist/internal/defaultFractionalDigits.js +23 -0
  94. package/dist/internal/differenceRecord.d.ts +32 -0
  95. package/dist/internal/differenceRecord.js +79 -0
  96. package/dist/internal/divisionBoundary.d.ts +19 -0
  97. package/dist/internal/divisionBoundary.js +23 -0
  98. package/dist/internal/durationUntilString.d.ts +1 -1
  99. package/dist/internal/durationUntilString.js +10 -2
  100. package/dist/internal/englishCalendarNames.d.ts +11 -0
  101. package/dist/internal/englishCalendarNames.js +21 -1
  102. package/dist/internal/epochNanoseconds.d.ts +27 -0
  103. package/dist/internal/epochNanoseconds.js +31 -0
  104. package/dist/internal/fiscalCalendar.d.ts +36 -0
  105. package/dist/internal/fiscalCalendar.js +86 -0
  106. package/dist/internal/floorDivide.d.ts +15 -0
  107. package/dist/internal/floorDivide.js +18 -0
  108. package/dist/internal/foreignEpochs.d.ts +134 -0
  109. package/dist/internal/foreignEpochs.js +139 -0
  110. package/dist/internal/formatCalendarDays.d.ts +28 -0
  111. package/dist/internal/formatCalendarDays.js +49 -0
  112. package/dist/internal/formatDateInCalendar.d.ts +14 -39
  113. package/dist/internal/formatDateInCalendar.js +16 -47
  114. package/dist/internal/formatRelativeDuration.d.ts +27 -0
  115. package/dist/internal/formatRelativeDuration.js +45 -0
  116. package/dist/internal/getLocaleFirstDayOfWeek.d.ts +9 -6
  117. package/dist/internal/getLocaleFirstDayOfWeek.js +9 -10
  118. package/dist/internal/getLocaleWeekYearBounds.d.ts +17 -9
  119. package/dist/internal/getLocaleWeekYearBounds.js +45 -26
  120. package/dist/internal/getLocaleWeekendDays.d.ts +9 -18
  121. package/dist/internal/getLocaleWeekendDays.js +9 -5
  122. package/dist/internal/halfOpenIntervals.d.ts +102 -0
  123. package/dist/internal/halfOpenIntervals.js +180 -0
  124. package/dist/internal/hasCalendarAnnotation.d.ts +20 -20
  125. package/dist/internal/hasCalendarAnnotation.js +23 -21
  126. package/dist/internal/hourDurationString.d.ts +16 -0
  127. package/dist/internal/hourDurationString.js +47 -0
  128. package/dist/internal/httpDateFields.d.ts +24 -0
  129. package/dist/internal/httpDateFields.js +86 -0
  130. package/dist/internal/index.d.ts +28 -9
  131. package/dist/internal/index.js +28 -9
  132. package/dist/internal/instantFormatOptions.d.ts +43 -0
  133. package/dist/internal/instantFormatOptions.js +99 -0
  134. package/dist/internal/instantIntervalText.d.ts +20 -0
  135. package/dist/internal/instantIntervalText.js +25 -0
  136. package/dist/internal/instantNanoseconds.d.ts +25 -0
  137. package/dist/internal/instantNanoseconds.js +41 -0
  138. package/dist/internal/intervalCountHelpers.d.ts +16 -10
  139. package/dist/internal/intervalCountHelpers.js +1 -31
  140. package/dist/internal/intervalNanoseconds.d.ts +47 -0
  141. package/dist/internal/intervalNanoseconds.js +86 -0
  142. package/dist/internal/isObject.d.ts +26 -0
  143. package/dist/internal/isObject.js +30 -0
  144. package/dist/internal/isoStringBody.d.ts +40 -0
  145. package/dist/internal/isoStringBody.js +85 -0
  146. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  147. package/dist/internal/localeWeekInfo.d.ts +34 -0
  148. package/dist/internal/localeWeekInfo.js +27 -0
  149. package/dist/internal/maxPieces.d.ts +41 -0
  150. package/dist/internal/maxPieces.js +53 -0
  151. package/dist/internal/measureNearRangeEnd.d.ts +26 -0
  152. package/dist/internal/measureNearRangeEnd.js +47 -0
  153. package/dist/internal/monthGridWeekRow.d.ts +4 -1
  154. package/dist/internal/monthGridWeekRow.js +3 -0
  155. package/dist/internal/normalizeTimeZone.d.ts +17 -10
  156. package/dist/internal/normalizeTimeZone.js +25 -15
  157. package/dist/internal/patternToken.d.ts +2 -1
  158. package/dist/internal/patternToken.js +10 -4
  159. package/dist/internal/plainDateAdd.d.ts +20 -0
  160. package/dist/internal/plainDateAdd.js +42 -0
  161. package/dist/internal/plainDateUntil.d.ts +21 -0
  162. package/dist/internal/plainDateUntil.js +48 -0
  163. package/dist/internal/plainFormatOptions.d.ts +59 -0
  164. package/dist/internal/plainFormatOptions.js +165 -0
  165. package/dist/internal/resolveDateTimeUnit.d.ts +4 -1
  166. package/dist/internal/resolveDateTimeUnit.js +2 -12
  167. package/dist/internal/resolveDurationRelativeTo.d.ts +28 -22
  168. package/dist/internal/resolveDurationRelativeTo.js +69 -25
  169. package/dist/internal/resolveDurationUnit.d.ts +4 -1
  170. package/dist/internal/resolveDurationUnit.js +2 -11
  171. package/dist/internal/resolveLocale.d.ts +37 -0
  172. package/dist/internal/resolveLocale.js +59 -0
  173. package/dist/internal/resolveManualRoundingOptions.d.ts +23 -0
  174. package/dist/internal/resolveManualRoundingOptions.js +39 -0
  175. package/dist/internal/resolveMinimalDaysInFirstWeek.d.ts +19 -0
  176. package/dist/internal/resolveMinimalDaysInFirstWeek.js +28 -0
  177. package/dist/internal/resolveOverflow.d.ts +6 -0
  178. package/dist/internal/resolveOverflow.js +7 -1
  179. package/dist/internal/resolveReadingTimeZone.d.ts +11 -0
  180. package/dist/internal/resolveReadingTimeZone.js +18 -0
  181. package/dist/internal/resolveUnixIntervalPair.d.ts +30 -0
  182. package/dist/internal/resolveUnixIntervalPair.js +53 -0
  183. package/dist/internal/resolveWeekStartsOn.d.ts +12 -0
  184. package/dist/internal/resolveWeekStartsOn.js +18 -0
  185. package/dist/internal/rfc5322DateTime.d.ts +26 -0
  186. package/dist/internal/rfc5322DateTime.js +176 -0
  187. package/dist/internal/splitStep.d.ts +81 -0
  188. package/dist/internal/splitStep.js +182 -0
  189. package/dist/internal/startOrEndOfUnix.d.ts +26 -0
  190. package/dist/internal/startOrEndOfUnix.js +47 -0
  191. package/dist/internal/startOrEndOfUtc.d.ts +27 -0
  192. package/dist/{utc/calculate → internal}/startOrEndOfUtc.js +45 -24
  193. package/dist/internal/startOrEndOfZoned.d.ts +22 -0
  194. package/dist/internal/startOrEndOfZoned.js +49 -0
  195. package/dist/internal/temporalCompat/calendarDateArithmetic.d.ts +33 -0
  196. package/dist/internal/temporalCompat/calendarDateArithmetic.js +199 -0
  197. package/dist/internal/temporalCompat/calendarDateFromFields.d.ts +36 -0
  198. package/dist/internal/temporalCompat/calendarDateFromFields.js +120 -0
  199. package/dist/internal/temporalCompat/calendarFields.d.ts +25 -0
  200. package/dist/internal/temporalCompat/calendarFields.js +131 -0
  201. package/dist/internal/temporalCompat/capabilities.d.ts +28 -0
  202. package/dist/internal/temporalCompat/capabilities.js +74 -0
  203. package/dist/internal/temporalCompat/fieldSearch.d.ts +21 -0
  204. package/dist/internal/temporalCompat/fieldSearch.js +83 -0
  205. package/dist/internal/temporalCompat/fixedDay.d.ts +25 -0
  206. package/dist/internal/temporalCompat/fixedDay.js +45 -0
  207. package/dist/internal/temporalCompat/hebrewArithmetic.d.ts +19 -0
  208. package/dist/internal/temporalCompat/hebrewArithmetic.js +150 -0
  209. package/dist/internal/temporalCompat/index.d.ts +4 -0
  210. package/dist/internal/temporalCompat/index.js +5 -0
  211. package/dist/internal/temporalCompat/indianArithmetic.d.ts +16 -0
  212. package/dist/internal/temporalCompat/indianArithmetic.js +87 -0
  213. package/dist/internal/temporalCompat/largeMonthSpan.d.ts +19 -0
  214. package/dist/internal/temporalCompat/largeMonthSpan.js +199 -0
  215. package/dist/internal/temporalCompat/nonIsoArithmetic.d.ts +59 -0
  216. package/dist/internal/temporalCompat/nonIsoArithmetic.js +220 -0
  217. package/dist/internal/temporalCompat/readArithmeticModel.d.ts +3 -0
  218. package/dist/internal/temporalCompat/readArithmeticModel.js +284 -0
  219. package/dist/internal/temporalCompat/repros.d.ts +31 -0
  220. package/dist/internal/temporalCompat/repros.js +556 -0
  221. package/dist/internal/toInstantFromUtc.d.ts +10 -0
  222. package/dist/internal/toInstantFromUtc.js +19 -0
  223. package/dist/internal/unixEpochValue.d.ts +166 -0
  224. package/dist/internal/unixEpochValue.js +245 -0
  225. package/dist/internal/unixFormatReference.d.ts +18 -0
  226. package/dist/internal/unixFormatReference.js +44 -0
  227. package/dist/internal/unixZonedDateTime.d.ts +22 -0
  228. package/dist/internal/unixZonedDateTime.js +32 -0
  229. package/dist/internal/utcOffsetString.d.ts +39 -0
  230. package/dist/internal/utcOffsetString.js +75 -0
  231. package/dist/internal/utcZonedDateTime.d.ts +16 -0
  232. package/dist/internal/utcZonedDateTime.js +28 -0
  233. package/dist/internal/zonedBucket.d.ts +91 -0
  234. package/dist/internal/zonedBucket.js +441 -0
  235. package/dist/internal/zonedFormatReference.d.ts +15 -0
  236. package/dist/internal/zonedFormatReference.js +24 -0
  237. package/dist/internal/zonedLocalDates.d.ts +15 -0
  238. package/dist/internal/zonedLocalDates.js +58 -0
  239. package/dist/internal/zonedNowUnitValue.d.ts +24 -0
  240. package/dist/internal/zonedNowUnitValue.js +58 -0
  241. package/dist/internal/zonedWallClock.d.ts +84 -0
  242. package/dist/internal/zonedWallClock.js +427 -0
  243. package/dist/internal/zonedWallClockDifference.d.ts +92 -0
  244. package/dist/internal/zonedWallClockDifference.js +1173 -0
  245. package/dist/internal/zonedWallClockOperations.d.ts +132 -0
  246. package/dist/internal/zonedWallClockOperations.js +553 -0
  247. package/dist/internal/zonelessCalendarDate.d.ts +12 -0
  248. package/dist/internal/zonelessCalendarDate.js +22 -0
  249. package/dist/interval/calculate/clampInterval.d.ts +22 -0
  250. package/dist/interval/calculate/clampInterval.js +31 -0
  251. package/dist/interval/calculate/index.d.ts +6 -0
  252. package/dist/interval/calculate/index.js +6 -0
  253. package/dist/interval/calculate/intersectIntervals.d.ts +23 -0
  254. package/dist/interval/calculate/intersectIntervals.js +43 -0
  255. package/dist/interval/calculate/mergeIntervals.d.ts +28 -0
  256. package/dist/interval/calculate/mergeIntervals.js +44 -0
  257. package/dist/interval/calculate/splitIntervalAt.d.ts +28 -0
  258. package/dist/interval/calculate/splitIntervalAt.js +63 -0
  259. package/dist/interval/calculate/subtractIntervals.d.ts +31 -0
  260. package/dist/interval/calculate/subtractIntervals.js +64 -0
  261. package/dist/interval/calculate/sumIntervals.d.ts +26 -0
  262. package/dist/interval/calculate/sumIntervals.js +40 -0
  263. package/dist/interval/compare/index.d.ts +2 -0
  264. package/dist/interval/compare/index.js +2 -0
  265. package/dist/interval/compare/intervalContains.d.ts +25 -0
  266. package/dist/interval/compare/intervalContains.js +39 -0
  267. package/dist/interval/compare/intervalsOverlap.d.ts +28 -0
  268. package/dist/interval/compare/intervalsOverlap.js +42 -0
  269. package/dist/interval/index.d.ts +4 -0
  270. package/dist/interval/index.js +5 -0
  271. package/dist/interval/validate/index.d.ts +1 -0
  272. package/dist/interval/validate/index.js +1 -0
  273. package/dist/interval/validate/isValidInterval.d.ts +29 -0
  274. package/dist/interval/validate/isValidInterval.js +38 -0
  275. package/dist/plain/calculate/addBusinessDays.d.ts +26 -9
  276. package/dist/plain/calculate/addBusinessDays.js +29 -21
  277. package/dist/plain/calculate/addDate.d.ts +9 -8
  278. package/dist/plain/calculate/addDate.js +35 -22
  279. package/dist/plain/calculate/addDateTime.js +24 -10
  280. package/dist/plain/calculate/addTime.d.ts +5 -8
  281. package/dist/plain/calculate/addTime.js +23 -16
  282. package/dist/plain/calculate/clampDate.js +3 -3
  283. package/dist/plain/calculate/closestDateTo.d.ts +11 -7
  284. package/dist/plain/calculate/closestDateTo.js +36 -24
  285. package/dist/plain/calculate/cycleDate.d.ts +1 -1
  286. package/dist/plain/calculate/cycleDate.js +10 -3
  287. package/dist/plain/calculate/cycleDateTime.d.ts +1 -1
  288. package/dist/plain/calculate/cycleDateTime.js +10 -3
  289. package/dist/plain/calculate/cycleTime.d.ts +6 -8
  290. package/dist/plain/calculate/cycleTime.js +15 -9
  291. package/dist/plain/calculate/diffDate.d.ts +31 -14
  292. package/dist/plain/calculate/diffDate.js +73 -38
  293. package/dist/plain/calculate/diffDateAsDuration.d.ts +13 -8
  294. package/dist/plain/calculate/diffDateAsDuration.js +23 -10
  295. package/dist/plain/calculate/diffDateTime.d.ts +17 -5
  296. package/dist/plain/calculate/diffDateTime.js +67 -28
  297. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +2 -2
  298. package/dist/plain/calculate/diffDateTimeAsDuration.js +10 -3
  299. package/dist/plain/calculate/diffTime.d.ts +18 -5
  300. package/dist/plain/calculate/diffTime.js +68 -27
  301. package/dist/plain/calculate/endOfDate.d.ts +10 -2
  302. package/dist/plain/calculate/endOfDate.js +52 -27
  303. package/dist/plain/calculate/endOfDateTime.d.ts +17 -2
  304. package/dist/plain/calculate/endOfDateTime.js +126 -103
  305. package/dist/plain/calculate/endOfTime.d.ts +16 -2
  306. package/dist/plain/calculate/endOfTime.js +77 -59
  307. package/dist/plain/calculate/getLargestDateDurationUnit.d.ts +13 -5
  308. package/dist/plain/calculate/getLargestDateDurationUnit.js +26 -10
  309. package/dist/plain/calculate/getLargestDateTimeDurationUnit.d.ts +13 -6
  310. package/dist/plain/calculate/getLargestDateTimeDurationUnit.js +37 -22
  311. package/dist/plain/calculate/getLargestTimeDurationUnit.d.ts +13 -6
  312. package/dist/plain/calculate/getLargestTimeDurationUnit.js +33 -18
  313. package/dist/plain/calculate/getLocaleDayOfWeek.d.ts +8 -4
  314. package/dist/plain/calculate/getLocaleDayOfWeek.js +8 -3
  315. package/dist/plain/calculate/getLocaleEndOfWeek.d.ts +8 -4
  316. package/dist/plain/calculate/getLocaleEndOfWeek.js +8 -3
  317. package/dist/plain/calculate/getLocaleStartOfWeek.d.ts +8 -4
  318. package/dist/plain/calculate/getLocaleStartOfWeek.js +8 -3
  319. package/dist/plain/calculate/getLocaleWeekYear.d.ts +29 -19
  320. package/dist/plain/calculate/getLocaleWeekYear.js +48 -28
  321. package/dist/plain/calculate/getWeekNumber.d.ts +21 -2
  322. package/dist/plain/calculate/getWeekNumber.js +33 -12
  323. package/dist/plain/calculate/getWeekOfMonth.d.ts +4 -2
  324. package/dist/plain/calculate/getWeekOfMonth.js +8 -3
  325. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +25 -14
  326. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +45 -25
  327. package/dist/plain/calculate/getWeeksInMonth.d.ts +4 -2
  328. package/dist/plain/calculate/getWeeksInMonth.js +8 -3
  329. package/dist/plain/calculate/getWeeksInYear.d.ts +5 -4
  330. package/dist/plain/calculate/getWeeksInYear.js +9 -14
  331. package/dist/plain/calculate/index.d.ts +2 -1
  332. package/dist/plain/calculate/index.js +2 -1
  333. package/dist/plain/calculate/maxDate.js +19 -12
  334. package/dist/plain/calculate/maxDateTime.js +19 -12
  335. package/dist/plain/calculate/maxTime.js +19 -12
  336. package/dist/plain/calculate/minDate.js +19 -12
  337. package/dist/plain/calculate/minDateTime.js +19 -12
  338. package/dist/plain/calculate/minTime.js +19 -12
  339. package/dist/plain/calculate/nextWeekday.js +5 -0
  340. package/dist/plain/calculate/previousWeekday.js +5 -0
  341. package/dist/plain/calculate/roundDate.d.ts +23 -5
  342. package/dist/plain/calculate/roundDate.js +88 -46
  343. package/dist/plain/calculate/roundDateTime.d.ts +27 -3
  344. package/dist/plain/calculate/roundDateTime.js +128 -69
  345. package/dist/plain/calculate/roundTime.d.ts +8 -1
  346. package/dist/plain/calculate/roundTime.js +32 -17
  347. package/dist/plain/calculate/setDate.js +4 -0
  348. package/dist/plain/calculate/setDateTime.js +4 -0
  349. package/dist/plain/calculate/setTime.d.ts +1 -1
  350. package/dist/plain/calculate/setTime.js +5 -1
  351. package/dist/plain/calculate/sortDateTimes.js +17 -10
  352. package/dist/plain/calculate/sortDates.js +17 -10
  353. package/dist/plain/calculate/sortTimes.js +17 -10
  354. package/dist/plain/calculate/startOfDate.d.ts +7 -2
  355. package/dist/plain/calculate/startOfDate.js +52 -27
  356. package/dist/plain/calculate/startOfDateTime.d.ts +5 -2
  357. package/dist/plain/calculate/startOfDateTime.js +81 -62
  358. package/dist/plain/calculate/startOfQuarterForDateTime.d.ts +2 -0
  359. package/dist/plain/calculate/startOfQuarterForDateTime.js +12 -1
  360. package/dist/plain/calculate/startOfTime.d.ts +15 -2
  361. package/dist/plain/calculate/startOfTime.js +33 -37
  362. package/dist/plain/calculate/subtractBusinessDays.d.ts +25 -10
  363. package/dist/plain/calculate/subtractBusinessDays.js +28 -22
  364. package/dist/plain/calculate/subtractDate.d.ts +8 -7
  365. package/dist/plain/calculate/subtractDate.js +35 -21
  366. package/dist/plain/calculate/subtractDateTime.js +24 -10
  367. package/dist/plain/calculate/subtractTime.d.ts +5 -8
  368. package/dist/plain/calculate/subtractTime.js +23 -16
  369. package/dist/plain/calculate/{weekOfYear.d.ts → weekOfYearForDate.d.ts} +0 -14
  370. package/dist/plain/calculate/weekOfYearForDate.js +28 -0
  371. package/dist/plain/calculate/weekOfYearForDateTime.d.ts +14 -0
  372. package/dist/plain/calculate/{weekOfYear.js → weekOfYearForDateTime.js} +1 -27
  373. package/dist/plain/chop/index.d.ts +0 -1
  374. package/dist/plain/chop/index.js +0 -1
  375. package/dist/plain/compare/areDateTimesEqualBy.d.ts +10 -5
  376. package/dist/plain/compare/areDateTimesEqualBy.js +35 -10
  377. package/dist/plain/compare/areDatesEqualBy.d.ts +10 -3
  378. package/dist/plain/compare/areDatesEqualBy.js +41 -14
  379. package/dist/plain/compare/isBetweenDate.js +32 -16
  380. package/dist/plain/compare/isBetweenDateTime.js +34 -18
  381. package/dist/plain/compare/isBetweenTime.js +32 -16
  382. package/dist/plain/compare/isBusinessDay.d.ts +25 -11
  383. package/dist/plain/compare/isBusinessDay.js +36 -15
  384. package/dist/plain/compare/isThisUnit.d.ts +13 -4
  385. package/dist/plain/compare/isThisUnit.js +33 -13
  386. package/dist/plain/compare/isWeekend.d.ts +8 -4
  387. package/dist/plain/compare/isWeekend.js +7 -3
  388. package/dist/plain/convert/convertDateToCalendar.d.ts +34 -33
  389. package/dist/plain/convert/convertDateToCalendar.js +41 -40
  390. package/dist/plain/format/formatCalendar.d.ts +14 -8
  391. package/dist/plain/format/formatCalendar.js +47 -25
  392. package/dist/plain/format/formatDate.d.ts +22 -4
  393. package/dist/plain/format/formatDate.js +37 -5
  394. package/dist/plain/format/formatDateRange.d.ts +18 -4
  395. package/dist/plain/format/formatDateRange.js +29 -5
  396. package/dist/plain/format/formatDateTime.d.ts +23 -4
  397. package/dist/plain/format/formatDateTime.js +31 -5
  398. package/dist/plain/format/formatDateTimeRange.d.ts +21 -4
  399. package/dist/plain/format/formatDateTimeRange.js +29 -5
  400. package/dist/plain/format/formatDateTimeToParts.d.ts +33 -6
  401. package/dist/plain/format/formatDateTimeToParts.js +40 -14
  402. package/dist/plain/format/formatDateToParts.d.ts +25 -3
  403. package/dist/plain/format/formatDateToParts.js +36 -11
  404. package/dist/plain/format/formatRelativeDate.d.ts +10 -17
  405. package/dist/plain/format/formatRelativeDate.js +39 -24
  406. package/dist/plain/format/formatRelativeDateTime.d.ts +18 -20
  407. package/dist/plain/format/formatRelativeDateTime.js +35 -33
  408. package/dist/plain/format/formatRelativeTime.d.ts +11 -18
  409. package/dist/plain/format/formatRelativeTime.js +36 -21
  410. package/dist/plain/format/formatSql.d.ts +15 -10
  411. package/dist/plain/format/formatSql.js +20 -11
  412. package/dist/plain/format/formatTime.d.ts +19 -4
  413. package/dist/plain/format/formatTime.js +32 -5
  414. package/dist/plain/get/getNowUnit.d.ts +5 -3
  415. package/dist/plain/get/getNowUnit.js +14 -29
  416. package/dist/plain/index.js +1 -1
  417. package/dist/plain/interval/intervalAbutsDate.d.ts +12 -7
  418. package/dist/plain/interval/intervalAbutsDate.js +15 -19
  419. package/dist/plain/interval/intervalAbutsDateTime.d.ts +9 -7
  420. package/dist/plain/interval/intervalAbutsDateTime.js +17 -23
  421. package/dist/plain/interval/intervalAbutsTime.d.ts +11 -5
  422. package/dist/plain/interval/intervalAbutsTime.js +19 -21
  423. package/dist/plain/interval/intervalContainsDate.d.ts +17 -10
  424. package/dist/plain/interval/intervalContainsDate.js +20 -15
  425. package/dist/plain/interval/intervalContainsDateTime.d.ts +16 -11
  426. package/dist/plain/interval/intervalContainsDateTime.js +24 -20
  427. package/dist/plain/interval/intervalContainsTime.d.ts +20 -10
  428. package/dist/plain/interval/intervalContainsTime.js +28 -19
  429. package/dist/plain/interval/intervalCountDate.d.ts +13 -8
  430. package/dist/plain/interval/intervalCountDate.js +46 -14
  431. package/dist/plain/interval/intervalCountDateTime.d.ts +6 -4
  432. package/dist/plain/interval/intervalCountDateTime.js +63 -18
  433. package/dist/plain/interval/intervalCountTime.d.ts +3 -4
  434. package/dist/plain/interval/intervalCountTime.js +9 -9
  435. package/dist/plain/interval/intervalDifferenceDate.d.ts +13 -6
  436. package/dist/plain/interval/intervalDifferenceDate.js +19 -32
  437. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +10 -4
  438. package/dist/plain/interval/intervalDifferenceDateTime.js +21 -27
  439. package/dist/plain/interval/intervalDifferenceTime.d.ts +11 -4
  440. package/dist/plain/interval/intervalDifferenceTime.js +22 -27
  441. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +16 -4
  442. package/dist/plain/interval/intervalDivideEquallyDate.js +57 -33
  443. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +16 -4
  444. package/dist/plain/interval/intervalDivideEquallyDateTime.js +67 -31
  445. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +16 -4
  446. package/dist/plain/interval/intervalDivideEquallyTime.js +58 -31
  447. package/dist/plain/interval/intervalEngulfsDate.d.ts +16 -9
  448. package/dist/plain/interval/intervalEngulfsDate.js +19 -12
  449. package/dist/plain/interval/intervalEngulfsDateTime.d.ts +16 -11
  450. package/dist/plain/interval/intervalEngulfsDateTime.js +24 -18
  451. package/dist/plain/interval/intervalEngulfsTime.d.ts +18 -8
  452. package/dist/plain/interval/intervalEngulfsTime.js +26 -15
  453. package/dist/plain/interval/intervalFromDurationDate.d.ts +5 -4
  454. package/dist/plain/interval/intervalFromDurationDate.js +11 -8
  455. package/dist/plain/interval/intervalFromDurationDateTime.js +4 -0
  456. package/dist/plain/interval/intervalFromDurationTime.d.ts +10 -12
  457. package/dist/plain/interval/intervalFromDurationTime.js +28 -17
  458. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -4
  459. package/dist/plain/interval/intervalIntersectionDate.js +14 -9
  460. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -4
  461. package/dist/plain/interval/intervalIntersectionDateTime.js +19 -13
  462. package/dist/plain/interval/intervalIntersectionTime.d.ts +7 -3
  463. package/dist/plain/interval/intervalIntersectionTime.js +17 -12
  464. package/dist/plain/interval/intervalLengthDate.d.ts +9 -6
  465. package/dist/plain/interval/intervalLengthDate.js +40 -8
  466. package/dist/plain/interval/intervalLengthDateTime.js +2 -2
  467. package/dist/plain/interval/intervalOverlappingDaysDate.d.ts +16 -17
  468. package/dist/plain/interval/intervalOverlappingDaysDate.js +30 -30
  469. package/dist/plain/interval/intervalOverlappingDaysDateTime.d.ts +7 -12
  470. package/dist/plain/interval/intervalOverlappingDaysDateTime.js +24 -24
  471. package/dist/plain/interval/intervalSplitAtDate.d.ts +10 -5
  472. package/dist/plain/interval/intervalSplitAtDate.js +48 -36
  473. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +9 -4
  474. package/dist/plain/interval/intervalSplitAtDateTime.js +44 -32
  475. package/dist/plain/interval/intervalSplitAtTime.d.ts +9 -4
  476. package/dist/plain/interval/intervalSplitAtTime.js +44 -32
  477. package/dist/plain/interval/intervalUnionDate.d.ts +14 -6
  478. package/dist/plain/interval/intervalUnionDate.js +19 -11
  479. package/dist/plain/interval/intervalUnionDateTime.d.ts +12 -5
  480. package/dist/plain/interval/intervalUnionDateTime.js +22 -14
  481. package/dist/plain/interval/intervalUnionTime.d.ts +10 -3
  482. package/dist/plain/interval/intervalUnionTime.js +20 -12
  483. package/dist/plain/interval/intervalXorAllDate.d.ts +11 -10
  484. package/dist/plain/interval/intervalXorAllDate.js +37 -59
  485. package/dist/plain/interval/intervalXorAllDateTime.d.ts +7 -5
  486. package/dist/plain/interval/intervalXorAllDateTime.js +28 -48
  487. package/dist/plain/interval/intervalXorAllTime.d.ts +8 -4
  488. package/dist/plain/interval/intervalXorAllTime.js +29 -47
  489. package/dist/plain/interval/intervalXorDate.d.ts +10 -9
  490. package/dist/plain/interval/intervalXorDate.js +19 -54
  491. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -7
  492. package/dist/plain/interval/intervalXorDateTime.js +23 -50
  493. package/dist/plain/interval/intervalXorTime.d.ts +8 -7
  494. package/dist/plain/interval/intervalXorTime.js +22 -50
  495. package/dist/plain/interval/intervalsOverlapDate.d.ts +14 -7
  496. package/dist/plain/interval/intervalsOverlapDate.js +17 -10
  497. package/dist/plain/interval/intervalsOverlapDateTime.d.ts +12 -7
  498. package/dist/plain/interval/intervalsOverlapDateTime.js +20 -14
  499. package/dist/plain/interval/intervalsOverlapTime.d.ts +10 -5
  500. package/dist/plain/interval/intervalsOverlapTime.js +18 -12
  501. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -5
  502. package/dist/plain/interval/mergeIntervalsDate.js +37 -38
  503. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +7 -3
  504. package/dist/plain/interval/mergeIntervalsDateTime.js +31 -32
  505. package/dist/plain/interval/mergeIntervalsTime.d.ts +7 -3
  506. package/dist/plain/interval/mergeIntervalsTime.js +31 -31
  507. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +26 -6
  508. package/dist/plain/interval/splitIntervalByUnitDate.js +76 -43
  509. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -2
  510. package/dist/plain/interval/splitIntervalByUnitDateTime.js +65 -39
  511. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +18 -2
  512. package/dist/plain/interval/splitIntervalByUnitTime.js +76 -39
  513. package/dist/plain/interval/validate/isValidDateInterval.d.ts +4 -2
  514. package/dist/plain/interval/validate/isValidDateInterval.js +4 -2
  515. package/dist/plain/interval/validate/isValidDateTimeInterval.d.ts +5 -0
  516. package/dist/plain/interval/validate/isValidDateTimeInterval.js +7 -2
  517. package/dist/plain/interval/validate/isValidTimeInterval.d.ts +5 -0
  518. package/dist/plain/interval/validate/isValidTimeInterval.js +8 -18
  519. package/dist/plain/locale/getLocaleEraNames.d.ts +14 -4
  520. package/dist/plain/locale/getLocaleEraNames.js +56 -41
  521. package/dist/plain/locale/getLocaleMeridiems.d.ts +7 -4
  522. package/dist/plain/locale/getLocaleMeridiems.js +28 -22
  523. package/dist/plain/locale/getLocaleMonthNames.d.ts +14 -4
  524. package/dist/plain/locale/getLocaleMonthNames.js +34 -19
  525. package/dist/plain/locale/getLocaleWeekdayNames.d.ts +14 -7
  526. package/dist/plain/locale/getLocaleWeekdayNames.js +40 -22
  527. package/dist/plain/map/mapDatesInRange.d.ts +18 -1
  528. package/dist/plain/map/mapDatesInRange.js +53 -17
  529. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +3 -2
  530. package/dist/plain/parse/parseDateTimeWithPattern.js +30 -24
  531. package/dist/plain/parse/parseDateWithPattern.d.ts +3 -2
  532. package/dist/plain/parse/parseDateWithPattern.js +22 -16
  533. package/dist/plain/parse/parseMicrosecondFromDateTime.d.ts +2 -1
  534. package/dist/plain/parse/parseMicrosecondFromDateTime.js +2 -1
  535. package/dist/plain/parse/parseMicrosecondFromTime.d.ts +2 -1
  536. package/dist/plain/parse/parseMicrosecondFromTime.js +2 -1
  537. package/dist/plain/parse/parseNanosecondFromDateTime.d.ts +2 -1
  538. package/dist/plain/parse/parseNanosecondFromDateTime.js +2 -1
  539. package/dist/plain/parse/parseNanosecondFromTime.d.ts +2 -1
  540. package/dist/plain/parse/parseNanosecondFromTime.js +2 -1
  541. package/dist/plain/parse/parseSql.d.ts +15 -12
  542. package/dist/plain/parse/parseSql.js +16 -13
  543. package/dist/plain/parse/parseTimeWithPattern.d.ts +3 -2
  544. package/dist/plain/parse/parseTimeWithPattern.js +27 -21
  545. package/dist/plain/parse/parseUnitFromDate.d.ts +9 -2
  546. package/dist/plain/parse/parseUnitFromDate.js +39 -19
  547. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  548. package/dist/plain/parse/parseUnitFromDateTime.js +54 -28
  549. package/dist/plain/parse/parseUnitFromTime.d.ts +9 -3
  550. package/dist/plain/parse/parseUnitFromTime.js +13 -3
  551. package/dist/plain/parse/parseWeekFromDate.d.ts +5 -0
  552. package/dist/plain/parse/parseWeekFromDate.js +24 -5
  553. package/dist/plain/parse/parseWeekFromDateTime.d.ts +5 -0
  554. package/dist/plain/parse/parseWeekFromDateTime.js +26 -5
  555. package/dist/plain/validate/isLeapSecond.d.ts +27 -9
  556. package/dist/plain/validate/isLeapSecond.js +30 -9
  557. package/dist/plain/validate/isLeapYear.d.ts +7 -1
  558. package/dist/plain/validate/isLeapYear.js +10 -1
  559. package/dist/plain/validate/isValidCalendarDate.d.ts +37 -6
  560. package/dist/plain/validate/isValidCalendarDate.js +37 -6
  561. package/dist/plain/validate/isValidDate.d.ts +9 -1
  562. package/dist/plain/validate/isValidDate.js +14 -5
  563. package/dist/plain/validate/isValidDateRange.d.ts +11 -4
  564. package/dist/plain/validate/isValidDateRange.js +32 -22
  565. package/dist/plain/validate/isValidDateTime.d.ts +7 -1
  566. package/dist/plain/validate/isValidDateTime.js +12 -5
  567. package/dist/plain/validate/isValidDateTimeRange.d.ts +3 -2
  568. package/dist/plain/validate/isValidDateTimeRange.js +30 -15
  569. package/dist/plain/validate/isValidIsoDateLike.d.ts +6 -1
  570. package/dist/plain/validate/isValidIsoDateLike.js +13 -8
  571. package/dist/plain/validate/isValidTime.d.ts +6 -1
  572. package/dist/plain/validate/isValidTime.js +10 -3
  573. package/dist/plain/validate/isValidTimeRange.d.ts +4 -2
  574. package/dist/plain/validate/isValidTimeRange.js +31 -27
  575. package/dist/precision/calculate/index.d.ts +1 -0
  576. package/dist/precision/calculate/index.js +1 -0
  577. package/dist/precision/calculate/truncateNanoseconds.d.ts +37 -0
  578. package/dist/precision/calculate/truncateNanoseconds.js +41 -0
  579. package/dist/precision/convert/fromDotNetTicks.d.ts +30 -0
  580. package/dist/precision/convert/fromDotNetTicks.js +39 -0
  581. package/dist/precision/convert/fromExcelSerial.d.ts +38 -0
  582. package/dist/precision/convert/fromExcelSerial.js +81 -0
  583. package/dist/precision/convert/fromFileTime.d.ts +30 -0
  584. package/dist/precision/convert/fromFileTime.js +39 -0
  585. package/dist/precision/convert/fromNanoseconds.d.ts +29 -0
  586. package/dist/precision/convert/fromNanoseconds.js +50 -0
  587. package/dist/precision/convert/fromNtpTimestamp.d.ts +43 -0
  588. package/dist/precision/convert/fromNtpTimestamp.js +57 -0
  589. package/dist/precision/convert/fromPgMicroseconds.d.ts +26 -0
  590. package/dist/precision/convert/fromPgMicroseconds.js +33 -0
  591. package/dist/precision/convert/index.d.ts +12 -0
  592. package/dist/precision/convert/index.js +12 -0
  593. package/dist/precision/convert/toDotNetTicks.d.ts +29 -0
  594. package/dist/precision/convert/toDotNetTicks.js +40 -0
  595. package/dist/precision/convert/toExcelSerial.d.ts +56 -0
  596. package/dist/precision/convert/toExcelSerial.js +85 -0
  597. package/dist/precision/convert/toFileTime.d.ts +31 -0
  598. package/dist/precision/convert/toFileTime.js +43 -0
  599. package/dist/precision/convert/toNanoseconds.d.ts +37 -0
  600. package/dist/precision/convert/toNanoseconds.js +40 -0
  601. package/dist/precision/convert/toNtpTimestamp.d.ts +30 -0
  602. package/dist/precision/convert/toNtpTimestamp.js +38 -0
  603. package/dist/precision/convert/toPgMicroseconds.d.ts +29 -0
  604. package/dist/precision/convert/toPgMicroseconds.js +42 -0
  605. package/dist/precision/format/formatNanoseconds.d.ts +26 -0
  606. package/dist/precision/format/formatNanoseconds.js +32 -0
  607. package/dist/precision/format/index.d.ts +1 -0
  608. package/dist/precision/format/index.js +1 -0
  609. package/dist/precision/index.d.ts +6 -0
  610. package/dist/precision/index.js +7 -0
  611. package/dist/precision/parse/index.d.ts +1 -0
  612. package/dist/precision/parse/index.js +1 -0
  613. package/dist/precision/parse/parseNanoseconds.d.ts +27 -0
  614. package/dist/precision/parse/parseNanoseconds.js +32 -0
  615. package/dist/precision/validate/index.d.ts +3 -0
  616. package/dist/precision/validate/index.js +3 -0
  617. package/dist/precision/validate/isValidInstant.d.ts +37 -0
  618. package/dist/precision/validate/isValidInstant.js +40 -0
  619. package/dist/precision/validate/isValidNanoPattern.d.ts +27 -0
  620. package/dist/precision/validate/isValidNanoPattern.js +40 -0
  621. package/dist/precision/validate/isValidNanoseconds.d.ts +25 -0
  622. package/dist/precision/validate/isValidNanoseconds.js +28 -0
  623. package/dist/regex/calendar-date.d.ts +30 -0
  624. package/dist/regex/calendar-date.js +31 -11
  625. package/dist/regex/calendar-zoned-date-time.d.ts +29 -0
  626. package/dist/regex/calendar-zoned-date-time.js +30 -41
  627. package/dist/regex/date-time.d.ts +28 -0
  628. package/dist/regex/date-time.js +29 -2
  629. package/dist/regex/date.d.ts +58 -0
  630. package/dist/regex/date.js +60 -3
  631. package/dist/regex/http-date.d.ts +19 -0
  632. package/dist/regex/http-date.js +19 -6
  633. package/dist/regex/index.d.ts +3 -0
  634. package/dist/regex/index.js +4 -0
  635. package/dist/regex/leap-second.d.ts +45 -0
  636. package/dist/regex/leap-second.js +46 -2
  637. package/dist/regex/nanoseconds.d.ts +20 -0
  638. package/dist/regex/nanoseconds.js +20 -0
  639. package/dist/regex/rfc-2822.d.ts +26 -0
  640. package/dist/regex/rfc-2822.js +26 -8
  641. package/dist/regex/rfc-3339.d.ts +26 -0
  642. package/dist/regex/rfc-3339.js +27 -7
  643. package/dist/regex/sql-date-time.d.ts +33 -0
  644. package/dist/regex/sql-date-time.js +34 -7
  645. package/dist/regex/time-zone-like.d.ts +30 -0
  646. package/dist/regex/time-zone-like.js +31 -1
  647. package/dist/regex/time.d.ts +73 -0
  648. package/dist/regex/time.js +73 -3
  649. package/dist/regex/unix.d.ts +29 -0
  650. package/dist/regex/unix.js +29 -0
  651. package/dist/regex/utc-date-time.d.ts +30 -0
  652. package/dist/regex/utc-date-time.js +31 -2
  653. package/dist/regex/utc-offset.d.ts +24 -0
  654. package/dist/regex/utc-offset.js +24 -0
  655. package/dist/span/calculate/index.d.ts +3 -0
  656. package/dist/span/calculate/index.js +3 -0
  657. package/dist/span/calculate/spanMs.d.ts +52 -0
  658. package/dist/span/calculate/spanMs.js +80 -0
  659. package/dist/span/calculate/spanNs.d.ts +43 -0
  660. package/dist/span/calculate/spanNs.js +51 -0
  661. package/dist/span/calculate/spanWallClock.d.ts +60 -0
  662. package/dist/span/calculate/spanWallClock.js +80 -0
  663. package/dist/span/index.d.ts +3 -0
  664. package/dist/span/index.js +4 -0
  665. package/dist/span/validate/index.d.ts +1 -0
  666. package/dist/span/validate/index.js +1 -0
  667. package/dist/span/validate/isValidSpan.d.ts +37 -0
  668. package/dist/span/validate/isValidSpan.js +41 -0
  669. package/dist/types/business-calendar.d.ts +27 -0
  670. package/dist/types/business-calendar.js +0 -0
  671. package/dist/types/calendar-options.d.ts +11 -0
  672. package/dist/types/calendar-options.js +0 -0
  673. package/dist/types/calendar-system.d.ts +9 -1
  674. package/dist/types/datetime-format-options.d.ts +6 -0
  675. package/dist/types/datetime-format-options.js +0 -0
  676. package/dist/types/duration-unit.d.ts +5 -0
  677. package/dist/types/duration-unit.js +0 -0
  678. package/dist/types/fiscal-calendar.d.ts +22 -0
  679. package/dist/types/fiscal-calendar.js +0 -0
  680. package/dist/types/index.d.ts +17 -0
  681. package/dist/types/index.js +16 -0
  682. package/dist/types/interval.d.ts +18 -0
  683. package/dist/types/interval.js +0 -0
  684. package/dist/types/now-unit.d.ts +5 -0
  685. package/dist/types/now-unit.js +0 -0
  686. package/dist/types/relative-date-time-unit.d.ts +6 -0
  687. package/dist/types/relative-date-time-unit.js +0 -0
  688. package/dist/types/relative-date-unit.d.ts +5 -0
  689. package/dist/types/relative-date-unit.js +0 -0
  690. package/dist/types/relative-time-options.d.ts +18 -0
  691. package/dist/types/relative-time-options.js +0 -0
  692. package/dist/types/relative-time-unit.d.ts +5 -0
  693. package/dist/types/relative-time-unit.js +0 -0
  694. package/dist/types/relative-unit.d.ts +6 -0
  695. package/dist/types/relative-unit.js +0 -0
  696. package/dist/types/roll-convention.d.ts +32 -0
  697. package/dist/types/roll-convention.js +0 -0
  698. package/dist/types/unix-now-unit.d.ts +5 -0
  699. package/dist/types/unix-now-unit.js +0 -0
  700. package/dist/types/utc-now-unit.d.ts +5 -0
  701. package/dist/types/utc-now-unit.js +0 -0
  702. package/dist/types/zone-bucket-unit.d.ts +11 -0
  703. package/dist/types/zone-bucket-unit.js +0 -0
  704. package/dist/unix/calculate/addUnix.d.ts +10 -4
  705. package/dist/unix/calculate/addUnix.js +39 -26
  706. package/dist/unix/calculate/diffUnix.d.ts +38 -11
  707. package/dist/unix/calculate/diffUnix.js +84 -40
  708. package/dist/unix/calculate/diffUnixAsDuration.d.ts +17 -7
  709. package/dist/unix/calculate/diffUnixAsDuration.js +42 -23
  710. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +15 -11
  711. package/dist/unix/calculate/endOfQuarterForUnix.js +20 -39
  712. package/dist/unix/calculate/endOfUnix.d.ts +23 -18
  713. package/dist/unix/calculate/endOfUnix.js +37 -15
  714. package/dist/unix/calculate/isBetweenUnix.d.ts +12 -6
  715. package/dist/unix/calculate/isBetweenUnix.js +34 -23
  716. package/dist/unix/calculate/maxUnix.d.ts +6 -3
  717. package/dist/unix/calculate/maxUnix.js +17 -8
  718. package/dist/unix/calculate/minUnix.d.ts +6 -3
  719. package/dist/unix/calculate/minUnix.js +17 -8
  720. package/dist/unix/calculate/roundUnix.d.ts +24 -10
  721. package/dist/unix/calculate/roundUnix.js +67 -42
  722. package/dist/unix/calculate/setUnix.d.ts +14 -5
  723. package/dist/unix/calculate/setUnix.js +48 -29
  724. package/dist/unix/calculate/sortUnix.d.ts +6 -3
  725. package/dist/unix/calculate/sortUnix.js +19 -11
  726. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +17 -12
  727. package/dist/unix/calculate/startOfQuarterForUnix.js +22 -30
  728. package/dist/unix/calculate/startOfUnix.d.ts +23 -18
  729. package/dist/unix/calculate/startOfUnix.js +37 -15
  730. package/dist/unix/calculate/subtractUnix.d.ts +10 -4
  731. package/dist/unix/calculate/subtractUnix.js +39 -26
  732. package/dist/unix/compare/areUnixEqual.d.ts +9 -5
  733. package/dist/unix/compare/areUnixEqual.js +17 -13
  734. package/dist/unix/compare/areUnixEqualBy.d.ts +14 -7
  735. package/dist/unix/compare/areUnixEqualBy.js +14 -7
  736. package/dist/unix/compare/isAfterUnix.d.ts +8 -4
  737. package/dist/unix/compare/isAfterUnix.js +16 -12
  738. package/dist/unix/compare/isBeforeUnix.d.ts +7 -4
  739. package/dist/unix/compare/isBeforeUnix.js +15 -12
  740. package/dist/unix/convert/convertUnixToPlainDate.d.ts +17 -9
  741. package/dist/unix/convert/convertUnixToPlainDate.js +34 -21
  742. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +15 -9
  743. package/dist/unix/convert/convertUnixToPlainDateTime.js +32 -21
  744. package/dist/unix/convert/convertUnixToPlainTime.d.ts +15 -9
  745. package/dist/unix/convert/convertUnixToPlainTime.js +32 -21
  746. package/dist/unix/convert/convertUnixToUtc.d.ts +15 -7
  747. package/dist/unix/convert/convertUnixToUtc.js +20 -15
  748. package/dist/unix/convert/convertUnixToZoned.d.ts +17 -10
  749. package/dist/unix/convert/convertUnixToZoned.js +31 -20
  750. package/dist/unix/format/formatCalendarUnix.d.ts +35 -6
  751. package/dist/unix/format/formatCalendarUnix.js +35 -81
  752. package/dist/unix/format/formatRelativeUnix.d.ts +26 -16
  753. package/dist/unix/format/formatRelativeUnix.js +46 -93
  754. package/dist/unix/format/formatUnix.d.ts +43 -2
  755. package/dist/unix/format/formatUnix.js +65 -32
  756. package/dist/unix/get/getUnixNow.d.ts +13 -7
  757. package/dist/unix/get/getUnixNow.js +27 -17
  758. package/dist/unix/get/getUnixNowUnit.d.ts +7 -5
  759. package/dist/unix/get/getUnixNowUnit.js +9 -35
  760. package/dist/unix/index.d.ts +1 -0
  761. package/dist/unix/index.js +2 -0
  762. package/dist/unix/interval/intervalAbutsUnix.d.ts +17 -12
  763. package/dist/unix/interval/intervalAbutsUnix.js +23 -41
  764. package/dist/unix/interval/intervalContainsUnix.d.ts +17 -7
  765. package/dist/unix/interval/intervalContainsUnix.js +25 -37
  766. package/dist/unix/interval/intervalCountUnix.d.ts +30 -13
  767. package/dist/unix/interval/intervalCountUnix.js +49 -23
  768. package/dist/unix/interval/intervalDifferenceUnix.d.ts +19 -10
  769. package/dist/unix/interval/intervalDifferenceUnix.js +25 -43
  770. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +24 -10
  771. package/dist/unix/interval/intervalDivideEquallyUnix.js +57 -36
  772. package/dist/unix/interval/intervalEngulfsUnix.d.ts +13 -7
  773. package/dist/unix/interval/intervalEngulfsUnix.js +18 -30
  774. package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -6
  775. package/dist/unix/interval/intervalFromDurationUnix.js +51 -39
  776. package/dist/unix/interval/intervalIntersectionUnix.d.ts +18 -11
  777. package/dist/unix/interval/intervalIntersectionUnix.js +25 -46
  778. package/dist/unix/interval/intervalLengthUnix.d.ts +21 -9
  779. package/dist/unix/interval/intervalLengthUnix.js +41 -18
  780. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +26 -12
  781. package/dist/unix/interval/intervalOverlappingDaysUnix.js +67 -63
  782. package/dist/unix/interval/intervalSplitAtUnix.d.ts +11 -6
  783. package/dist/unix/interval/intervalSplitAtUnix.js +41 -34
  784. package/dist/unix/interval/intervalUnionUnix.d.ts +15 -9
  785. package/dist/unix/interval/intervalUnionUnix.js +20 -42
  786. package/dist/unix/interval/intervalXorAllUnix.d.ts +8 -6
  787. package/dist/unix/interval/intervalXorAllUnix.js +21 -56
  788. package/dist/unix/interval/intervalXorUnix.d.ts +22 -11
  789. package/dist/unix/interval/intervalXorUnix.js +28 -56
  790. package/dist/unix/interval/intervalsOverlapUnix.d.ts +16 -10
  791. package/dist/unix/interval/intervalsOverlapUnix.js +21 -37
  792. package/dist/unix/interval/mergeIntervalsUnix.d.ts +10 -4
  793. package/dist/unix/interval/mergeIntervalsUnix.js +25 -36
  794. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +38 -8
  795. package/dist/unix/interval/splitIntervalByUnitUnix.js +72 -56
  796. package/dist/unix/interval/validate/isValidUnixInterval.d.ts +12 -6
  797. package/dist/unix/interval/validate/isValidUnixInterval.js +17 -16
  798. package/dist/unix/parse/index.d.ts +2 -0
  799. package/dist/unix/parse/index.js +2 -0
  800. package/dist/unix/parse/parseDateFromUnix.d.ts +10 -8
  801. package/dist/unix/parse/parseDateFromUnix.js +17 -29
  802. package/dist/unix/parse/parseDayFromUnix.d.ts +6 -4
  803. package/dist/unix/parse/parseDayFromUnix.js +18 -5
  804. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +8 -5
  805. package/dist/unix/parse/parseDayOfWeekFromUnix.js +15 -28
  806. package/dist/unix/parse/parseHourFromUnix.d.ts +6 -4
  807. package/dist/unix/parse/parseHourFromUnix.js +18 -5
  808. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
  809. package/dist/unix/parse/parseMicrosecondFromUnix.js +16 -3
  810. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
  811. package/dist/unix/parse/parseMillisecondFromUnix.js +16 -3
  812. package/dist/unix/parse/parseMinuteFromUnix.d.ts +6 -4
  813. package/dist/unix/parse/parseMinuteFromUnix.js +18 -5
  814. package/dist/unix/parse/parseMonthFromUnix.d.ts +6 -4
  815. package/dist/unix/parse/parseMonthFromUnix.js +18 -5
  816. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +8 -5
  817. package/dist/unix/parse/parseNanosecondFromUnix.js +20 -6
  818. package/dist/unix/parse/parseSecondFromUnix.d.ts +5 -3
  819. package/dist/unix/parse/parseSecondFromUnix.js +17 -4
  820. package/dist/unix/parse/parseTimeFromUnix.d.ts +10 -8
  821. package/dist/unix/parse/parseTimeFromUnix.js +17 -29
  822. package/dist/unix/parse/parseUnitFromUnix.d.ts +40 -9
  823. package/dist/unix/parse/parseUnitFromUnix.js +57 -55
  824. package/dist/unix/parse/parseWeekFromUnix.d.ts +15 -7
  825. package/dist/unix/parse/parseWeekFromUnix.js +32 -30
  826. package/dist/unix/parse/parseYearFromUnix.d.ts +5 -3
  827. package/dist/unix/parse/parseYearFromUnix.js +17 -4
  828. package/dist/unix/validate/isValidUnixMilliseconds.d.ts +8 -5
  829. package/dist/unix/validate/isValidUnixMilliseconds.js +10 -9
  830. package/dist/unix/validate/isValidUnixRange.d.ts +13 -7
  831. package/dist/unix/validate/isValidUnixRange.js +29 -19
  832. package/dist/unix/validate/isValidUnixSeconds.d.ts +8 -5
  833. package/dist/unix/validate/isValidUnixSeconds.js +10 -9
  834. package/dist/unix/validate/isValidUnixUnit.d.ts +22 -5
  835. package/dist/unix/validate/isValidUnixUnit.js +6 -8
  836. package/dist/utc/calculate/addUtc.js +26 -12
  837. package/dist/utc/calculate/diffUtc.d.ts +22 -7
  838. package/dist/utc/calculate/diffUtc.js +75 -31
  839. package/dist/utc/calculate/diffUtcAsDuration.d.ts +2 -2
  840. package/dist/utc/calculate/diffUtcAsDuration.js +10 -3
  841. package/dist/utc/calculate/endOfQuarterForUtc.d.ts +1 -1
  842. package/dist/utc/calculate/endOfQuarterForUtc.js +1 -1
  843. package/dist/utc/calculate/endOfUtc.d.ts +11 -4
  844. package/dist/utc/calculate/endOfUtc.js +22 -5
  845. package/dist/utc/calculate/isBetweenUtc.js +40 -24
  846. package/dist/utc/calculate/maxUtc.js +19 -12
  847. package/dist/utc/calculate/minUtc.js +19 -12
  848. package/dist/utc/calculate/roundUtc.d.ts +16 -2
  849. package/dist/utc/calculate/roundUtc.js +42 -31
  850. package/dist/utc/calculate/setUtc.d.ts +4 -8
  851. package/dist/utc/calculate/setUtc.js +25 -18
  852. package/dist/utc/calculate/sortUtc.js +17 -10
  853. package/dist/utc/calculate/startOfQuarterForUtc.d.ts +2 -0
  854. package/dist/utc/calculate/startOfQuarterForUtc.js +12 -1
  855. package/dist/utc/calculate/startOfUtc.d.ts +6 -4
  856. package/dist/utc/calculate/startOfUtc.js +17 -5
  857. package/dist/utc/calculate/subtractUtc.js +26 -12
  858. package/dist/utc/chop/chopUtc.d.ts +5 -2
  859. package/dist/utc/chop/chopUtc.js +8 -4
  860. package/dist/utc/compare/areUtcEqualBy.d.ts +10 -5
  861. package/dist/utc/compare/areUtcEqualBy.js +34 -11
  862. package/dist/utc/convert/convertUtcToPlainDate.js +22 -10
  863. package/dist/utc/convert/convertUtcToPlainDateTime.js +28 -16
  864. package/dist/utc/convert/convertUtcToPlainTime.js +22 -10
  865. package/dist/utc/convert/convertUtcToUnix.d.ts +12 -5
  866. package/dist/utc/convert/convertUtcToUnix.js +22 -13
  867. package/dist/utc/format/formatCalendarUtc.d.ts +13 -8
  868. package/dist/utc/format/formatCalendarUtc.js +32 -41
  869. package/dist/utc/format/formatHttp.d.ts +9 -3
  870. package/dist/utc/format/formatHttp.js +14 -12
  871. package/dist/utc/format/formatRelativeUtc.d.ts +20 -18
  872. package/dist/utc/format/formatRelativeUtc.js +43 -51
  873. package/dist/utc/format/formatUtc.d.ts +51 -1
  874. package/dist/utc/format/formatUtc.js +57 -11
  875. package/dist/utc/get/getUtcNowUnit.d.ts +5 -3
  876. package/dist/utc/get/getUtcNowUnit.js +11 -33
  877. package/dist/utc/index.d.ts +1 -0
  878. package/dist/utc/index.js +2 -0
  879. package/dist/utc/interval/intervalAbutsUtc.d.ts +10 -7
  880. package/dist/utc/interval/intervalAbutsUtc.js +18 -30
  881. package/dist/utc/interval/intervalContainsUtc.d.ts +19 -11
  882. package/dist/utc/interval/intervalContainsUtc.js +33 -34
  883. package/dist/utc/interval/intervalCountUtc.d.ts +3 -4
  884. package/dist/utc/interval/intervalCountUtc.js +12 -18
  885. package/dist/utc/interval/intervalDifferenceUtc.d.ts +13 -5
  886. package/dist/utc/interval/intervalDifferenceUtc.js +25 -51
  887. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +16 -3
  888. package/dist/utc/interval/intervalDivideEquallyUtc.js +54 -34
  889. package/dist/utc/interval/intervalEngulfsUtc.d.ts +17 -12
  890. package/dist/utc/interval/intervalEngulfsUtc.js +25 -26
  891. package/dist/utc/interval/intervalFromDurationUtc.js +5 -0
  892. package/dist/utc/interval/intervalIntersectionUtc.d.ts +12 -6
  893. package/dist/utc/interval/intervalIntersectionUtc.js +24 -41
  894. package/dist/utc/interval/intervalLengthUtc.js +5 -7
  895. package/dist/utc/interval/intervalOverlappingDaysUtc.d.ts +7 -13
  896. package/dist/utc/interval/intervalOverlappingDaysUtc.js +25 -36
  897. package/dist/utc/interval/intervalSplitAtUtc.d.ts +7 -2
  898. package/dist/utc/interval/intervalSplitAtUtc.js +39 -33
  899. package/dist/utc/interval/intervalUnionUtc.d.ts +15 -7
  900. package/dist/utc/interval/intervalUnionUtc.js +31 -42
  901. package/dist/utc/interval/intervalXorAllUtc.d.ts +7 -4
  902. package/dist/utc/interval/intervalXorAllUtc.js +30 -52
  903. package/dist/utc/interval/intervalXorUtc.d.ts +8 -6
  904. package/dist/utc/interval/intervalXorUtc.js +22 -56
  905. package/dist/utc/interval/intervalsOverlapUtc.d.ts +15 -9
  906. package/dist/utc/interval/intervalsOverlapUtc.js +23 -39
  907. package/dist/utc/interval/mergeIntervalsUtc.d.ts +9 -2
  908. package/dist/utc/interval/mergeIntervalsUtc.js +23 -36
  909. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +23 -2
  910. package/dist/utc/interval/splitIntervalByUnitUtc.js +65 -44
  911. package/dist/utc/interval/validate/isValidUtcInterval.d.ts +5 -0
  912. package/dist/utc/interval/validate/isValidUtcInterval.js +7 -6
  913. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -1
  914. package/dist/utc/parse/parseDateFromUtc.js +14 -9
  915. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -1
  916. package/dist/utc/parse/parseDayFromUtc.js +14 -8
  917. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -1
  918. package/dist/utc/parse/parseDayOfWeekFromUtc.js +24 -6
  919. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -1
  920. package/dist/utc/parse/parseHourFromUtc.js +14 -8
  921. package/dist/utc/parse/parseHttp.d.ts +39 -14
  922. package/dist/utc/parse/parseHttp.js +69 -28
  923. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +9 -2
  924. package/dist/utc/parse/parseMicrosecondFromUtc.js +18 -9
  925. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -1
  926. package/dist/utc/parse/parseMillisecondFromUtc.js +16 -8
  927. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -1
  928. package/dist/utc/parse/parseMinuteFromUtc.js +14 -8
  929. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -1
  930. package/dist/utc/parse/parseMonthFromUtc.js +14 -8
  931. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +9 -2
  932. package/dist/utc/parse/parseNanosecondFromUtc.js +18 -9
  933. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -1
  934. package/dist/utc/parse/parseSecondFromUtc.js +14 -8
  935. package/dist/utc/parse/parseTimeFromUtc.js +21 -10
  936. package/dist/utc/parse/parseUnitFromUtc.d.ts +39 -5
  937. package/dist/utc/parse/parseUnitFromUtc.js +58 -31
  938. package/dist/utc/parse/parseWeekFromUtc.d.ts +16 -3
  939. package/dist/utc/parse/parseWeekFromUtc.js +38 -10
  940. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -1
  941. package/dist/utc/parse/parseYearFromUtc.js +14 -8
  942. package/dist/utc/validate/isValidUtc.d.ts +8 -1
  943. package/dist/utc/validate/isValidUtc.js +12 -3
  944. package/dist/utc/validate/isValidUtcRange.d.ts +3 -2
  945. package/dist/utc/validate/isValidUtcRange.js +30 -19
  946. package/dist/zoned/calculate/addZoned.d.ts +40 -27
  947. package/dist/zoned/calculate/addZoned.js +71 -56
  948. package/dist/zoned/calculate/addZonedBusinessDays.d.ts +2 -0
  949. package/dist/zoned/calculate/addZonedBusinessDays.js +5 -2
  950. package/dist/zoned/calculate/clampZoned.js +4 -3
  951. package/dist/zoned/calculate/closestZonedTo.d.ts +6 -6
  952. package/dist/zoned/calculate/closestZonedTo.js +35 -26
  953. package/dist/zoned/calculate/cycleZoned.d.ts +10 -7
  954. package/dist/zoned/calculate/cycleZoned.js +19 -11
  955. package/dist/zoned/calculate/diffZoned.d.ts +39 -17
  956. package/dist/zoned/calculate/diffZoned.js +90 -45
  957. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +19 -9
  958. package/dist/zoned/calculate/diffZonedAsDuration.js +32 -15
  959. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +11 -11
  960. package/dist/zoned/calculate/endOfQuarterForZoned.js +32 -31
  961. package/dist/zoned/calculate/endOfZoned.d.ts +21 -14
  962. package/dist/zoned/calculate/endOfZoned.js +25 -111
  963. package/dist/zoned/calculate/getHoursInZonedDay.d.ts +8 -1
  964. package/dist/zoned/calculate/getHoursInZonedDay.js +10 -14
  965. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.d.ts +8 -4
  966. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.js +9 -6
  967. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +20 -26
  968. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +40 -44
  969. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +16 -24
  970. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +36 -42
  971. package/dist/zoned/calculate/getQuarterForZoned.js +2 -2
  972. package/dist/zoned/calculate/maxZoned.js +20 -12
  973. package/dist/zoned/calculate/minZoned.d.ts +1 -1
  974. package/dist/zoned/calculate/minZoned.js +21 -13
  975. package/dist/zoned/calculate/roundZoned.d.ts +18 -4
  976. package/dist/zoned/calculate/roundZoned.js +58 -33
  977. package/dist/zoned/calculate/setZoned.d.ts +9 -3
  978. package/dist/zoned/calculate/setZoned.js +39 -18
  979. package/dist/zoned/calculate/sortZoned.js +18 -10
  980. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +4 -7
  981. package/dist/zoned/calculate/startOfQuarterForZoned.js +23 -17
  982. package/dist/zoned/calculate/startOfZoned.d.ts +17 -13
  983. package/dist/zoned/calculate/startOfZoned.js +21 -103
  984. package/dist/zoned/calculate/subtractZoned.d.ts +36 -24
  985. package/dist/zoned/calculate/subtractZoned.js +66 -50
  986. package/dist/zoned/calculate/subtractZonedBusinessDays.d.ts +2 -0
  987. package/dist/zoned/calculate/subtractZonedBusinessDays.js +5 -2
  988. package/dist/zoned/chop/chopZonedDate.js +2 -2
  989. package/dist/zoned/chop/chopZonedDateTime.js +2 -2
  990. package/dist/zoned/chop/chopZonedMilliseconds.js +2 -2
  991. package/dist/zoned/chop/chopZonedSeconds.js +2 -2
  992. package/dist/zoned/chop/chopZonedTime.js +2 -2
  993. package/dist/zoned/chop/chopZonedTimezone.js +2 -2
  994. package/dist/zoned/compare/areZonedEqual.js +3 -2
  995. package/dist/zoned/compare/areZonedEqualBy.d.ts +15 -2
  996. package/dist/zoned/compare/areZonedEqualBy.js +45 -12
  997. package/dist/zoned/compare/isAfterZoned.js +3 -2
  998. package/dist/zoned/compare/isBeforeZoned.d.ts +1 -1
  999. package/dist/zoned/compare/isBeforeZoned.js +4 -3
  1000. package/dist/zoned/compare/isBetweenZoned.js +46 -29
  1001. package/dist/zoned/compare/isInDaylightSaving.js +4 -4
  1002. package/dist/zoned/compare/isZonedBusinessDay.d.ts +7 -4
  1003. package/dist/zoned/compare/isZonedBusinessDay.js +9 -6
  1004. package/dist/zoned/compare/isZonedFuture.js +2 -1
  1005. package/dist/zoned/compare/isZonedPast.js +2 -1
  1006. package/dist/zoned/compare/isZonedRelativeDay.js +2 -1
  1007. package/dist/zoned/compare/isZonedThisUnit.d.ts +12 -4
  1008. package/dist/zoned/compare/isZonedThisUnit.js +37 -16
  1009. package/dist/zoned/compare/isZonedWeekend.d.ts +8 -4
  1010. package/dist/zoned/compare/isZonedWeekend.js +9 -6
  1011. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +10 -5
  1012. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +34 -16
  1013. package/dist/zoned/convert/convertZonedToCalendar.d.ts +26 -38
  1014. package/dist/zoned/convert/convertZonedToCalendar.js +33 -48
  1015. package/dist/zoned/convert/convertZonedToPlainDateTime.d.ts +6 -0
  1016. package/dist/zoned/convert/convertZonedToPlainDateTime.js +8 -2
  1017. package/dist/zoned/convert/convertZonedToUnix.d.ts +12 -6
  1018. package/dist/zoned/convert/convertZonedToUnix.js +23 -16
  1019. package/dist/zoned/convert/convertZonedToUtc.js +2 -2
  1020. package/dist/zoned/convert/convertZonedToZoned.js +2 -2
  1021. package/dist/zoned/format/formatCalendarZoned.d.ts +7 -3
  1022. package/dist/zoned/format/formatCalendarZoned.js +37 -39
  1023. package/dist/zoned/format/formatRelativeZoned.d.ts +16 -14
  1024. package/dist/zoned/format/formatRelativeZoned.js +54 -54
  1025. package/dist/zoned/format/formatRfc2822.d.ts +14 -1
  1026. package/dist/zoned/format/formatRfc2822.js +27 -13
  1027. package/dist/zoned/format/formatRfc3339.d.ts +14 -1
  1028. package/dist/zoned/format/formatRfc3339.js +29 -3
  1029. package/dist/zoned/format/formatTimeZoneName.d.ts +18 -2
  1030. package/dist/zoned/format/formatTimeZoneName.js +28 -18
  1031. package/dist/zoned/format/formatZonedDateTime.d.ts +26 -5
  1032. package/dist/zoned/format/formatZonedDateTime.js +40 -9
  1033. package/dist/zoned/format/formatZonedRange.d.ts +25 -6
  1034. package/dist/zoned/format/formatZonedRange.js +61 -28
  1035. package/dist/zoned/format/formatZonedToParts.d.ts +30 -6
  1036. package/dist/zoned/format/formatZonedToParts.js +42 -13
  1037. package/dist/zoned/get/getDstTransitions.d.ts +24 -3
  1038. package/dist/zoned/get/getDstTransitions.js +17 -15
  1039. package/dist/zoned/get/getTimeZoneOffset.d.ts +11 -1
  1040. package/dist/zoned/get/getTimeZoneOffset.js +19 -2
  1041. package/dist/zoned/get/getZonedNow.js +20 -9
  1042. package/dist/zoned/get/getZonedNowUnit.d.ts +30 -2
  1043. package/dist/zoned/get/getZonedNowUnit.js +15 -31
  1044. package/dist/zoned/index.js +1 -1
  1045. package/dist/zoned/interval/intervalAbutsZoned.d.ts +18 -11
  1046. package/dist/zoned/interval/intervalAbutsZoned.js +24 -25
  1047. package/dist/zoned/interval/intervalContainsZoned.d.ts +16 -7
  1048. package/dist/zoned/interval/intervalContainsZoned.js +22 -14
  1049. package/dist/zoned/interval/intervalCountZoned.d.ts +19 -11
  1050. package/dist/zoned/interval/intervalCountZoned.js +32 -27
  1051. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +14 -8
  1052. package/dist/zoned/interval/intervalDifferenceZoned.js +25 -37
  1053. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +18 -9
  1054. package/dist/zoned/interval/intervalDivideEquallyZoned.js +67 -46
  1055. package/dist/zoned/interval/intervalEngulfsZoned.d.ts +10 -5
  1056. package/dist/zoned/interval/intervalEngulfsZoned.js +16 -10
  1057. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +25 -11
  1058. package/dist/zoned/interval/intervalFromDurationZoned.js +61 -44
  1059. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +12 -6
  1060. package/dist/zoned/interval/intervalIntersectionZoned.js +24 -18
  1061. package/dist/zoned/interval/intervalLengthZoned.d.ts +15 -6
  1062. package/dist/zoned/interval/intervalLengthZoned.js +23 -9
  1063. package/dist/zoned/interval/intervalOverlappingDaysZoned.d.ts +28 -17
  1064. package/dist/zoned/interval/intervalOverlappingDaysZoned.js +46 -34
  1065. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +6 -3
  1066. package/dist/zoned/interval/intervalSplitAtZoned.js +52 -42
  1067. package/dist/zoned/interval/intervalUnionZoned.d.ts +14 -8
  1068. package/dist/zoned/interval/intervalUnionZoned.js +25 -20
  1069. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -7
  1070. package/dist/zoned/interval/intervalXorAllZoned.js +42 -73
  1071. package/dist/zoned/interval/intervalXorZoned.d.ts +20 -10
  1072. package/dist/zoned/interval/intervalXorZoned.js +34 -62
  1073. package/dist/zoned/interval/intervalsOverlapZoned.d.ts +15 -7
  1074. package/dist/zoned/interval/intervalsOverlapZoned.js +21 -12
  1075. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +10 -3
  1076. package/dist/zoned/interval/mergeIntervalsZoned.js +44 -41
  1077. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +28 -5
  1078. package/dist/zoned/interval/splitIntervalByUnitZoned.js +72 -39
  1079. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.d.ts +13 -10
  1080. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.js +13 -10
  1081. package/dist/zoned/interval/validate/isValidZonedInterval.d.ts +7 -5
  1082. package/dist/zoned/interval/validate/isValidZonedInterval.js +12 -16
  1083. package/dist/zoned/map/mapZonedDatesInRange.d.ts +17 -1
  1084. package/dist/zoned/map/mapZonedDatesInRange.js +62 -26
  1085. package/dist/zoned/map/mapZonedHoursInDay.d.ts +10 -13
  1086. package/dist/zoned/map/mapZonedHoursInDay.js +13 -21
  1087. package/dist/zoned/parse/getZonedOffset.js +2 -2
  1088. package/dist/zoned/parse/getZonedOffsetAs.d.ts +15 -2
  1089. package/dist/zoned/parse/getZonedOffsetAs.js +10 -5
  1090. package/dist/zoned/parse/parseDateFromZoned.js +2 -2
  1091. package/dist/zoned/parse/parseDateTimeFromZoned.js +2 -2
  1092. package/dist/zoned/parse/parseDayFromZoned.js +2 -2
  1093. package/dist/zoned/parse/parseDayOfWeekFromZoned.js +2 -2
  1094. package/dist/zoned/parse/parseHourFromZoned.js +2 -2
  1095. package/dist/zoned/parse/parseMicrosecondFromZoned.d.ts +2 -1
  1096. package/dist/zoned/parse/parseMicrosecondFromZoned.js +4 -3
  1097. package/dist/zoned/parse/parseMillisecondFromZoned.js +2 -2
  1098. package/dist/zoned/parse/parseMinuteFromZoned.js +2 -2
  1099. package/dist/zoned/parse/parseMonthFromZoned.js +2 -2
  1100. package/dist/zoned/parse/parseNanosecondFromZoned.d.ts +2 -1
  1101. package/dist/zoned/parse/parseNanosecondFromZoned.js +4 -3
  1102. package/dist/zoned/parse/parseRfc2822.d.ts +32 -12
  1103. package/dist/zoned/parse/parseRfc2822.js +47 -45
  1104. package/dist/zoned/parse/parseRfc3339.d.ts +6 -0
  1105. package/dist/zoned/parse/parseRfc3339.js +6 -0
  1106. package/dist/zoned/parse/parseSecondFromZoned.js +2 -2
  1107. package/dist/zoned/parse/parseTimeFromZoned.js +2 -2
  1108. package/dist/zoned/parse/parseTimeZoneFromZoned.js +2 -2
  1109. package/dist/zoned/parse/parseUnitFromZoned.d.ts +36 -3
  1110. package/dist/zoned/parse/parseUnitFromZoned.js +59 -33
  1111. package/dist/zoned/parse/parseWeekFromZoned.d.ts +13 -3
  1112. package/dist/zoned/parse/parseWeekFromZoned.js +34 -10
  1113. package/dist/zoned/parse/parseYearFromZoned.js +2 -2
  1114. package/dist/zoned/validate/hasDaylightSaving.js +3 -3
  1115. package/dist/zoned/validate/isValidCalendarZonedDateTime.d.ts +31 -16
  1116. package/dist/zoned/validate/isValidCalendarZonedDateTime.js +31 -16
  1117. package/dist/zoned/validate/isValidTimeZone.d.ts +15 -2
  1118. package/dist/zoned/validate/isValidTimeZone.js +17 -4
  1119. package/dist/zoned/validate/isValidZonedDateTime.d.ts +14 -7
  1120. package/dist/zoned/validate/isValidZonedDateTime.js +20 -12
  1121. package/dist/zoned/validate/isValidZonedRange.d.ts +9 -2
  1122. package/dist/zoned/validate/isValidZonedRange.js +44 -16
  1123. package/package.json +487 -28
  1124. package/skills/gmt-arithmetic/SKILL.md +264 -0
  1125. package/skills/gmt-basics/SKILL.md +127 -0
  1126. package/skills/gmt-integration/SKILL.md +119 -0
  1127. package/skills/gmt-timezone/SKILL.md +197 -0
  1128. package/dist/internal/advanceBusinessDays.d.ts +0 -2
  1129. package/dist/internal/advanceBusinessDays.js +0 -15
  1130. package/dist/internal/ethiopicFamilyCalendar.d.ts +0 -47
  1131. package/dist/internal/ethiopicFamilyCalendar.js +0 -136
  1132. package/dist/internal/getLocaleMinimalDaysInFirstWeek.d.ts +0 -20
  1133. package/dist/internal/getLocaleMinimalDaysInFirstWeek.js +0 -31
  1134. package/dist/internal/resolveUnixTimeZone.d.ts +0 -20
  1135. package/dist/internal/resolveUnixTimeZone.js +0 -30
  1136. package/dist/unix/calculate/startOrEndOfUnix.d.ts +0 -9
  1137. package/dist/unix/calculate/startOrEndOfUnix.js +0 -122
  1138. package/dist/unix/interval/resolveUnixIntervalPair.d.ts +0 -7
  1139. package/dist/unix/interval/resolveUnixIntervalPair.js +0 -36
  1140. package/dist/utc/calculate/startOrEndOfUtc.d.ts +0 -6
  1141. package/skills/_artifacts/domain_map.yaml +0 -547
  1142. package/skills/_artifacts/skill_spec.md +0 -67
  1143. package/skills/_artifacts/skill_tree.yaml +0 -278
  1144. package/skills/api-expansion-workflow/SKILL.md +0 -52
  1145. package/skills/app-integration/SKILL.md +0 -38
  1146. package/skills/calculate-dates/SKILL.md +0 -432
  1147. package/skills/compare-dates/SKILL.md +0 -412
  1148. package/skills/convert-types/SKILL.md +0 -305
  1149. package/skills/durations/SKILL.md +0 -418
  1150. package/skills/format-date-time/SKILL.md +0 -486
  1151. package/skills/format-date-time/references/format-api.md +0 -34
  1152. package/skills/format-relative-time/SKILL.md +0 -223
  1153. package/skills/get-current/SKILL.md +0 -229
  1154. package/skills/interval-ops/SKILL.md +0 -432
  1155. package/skills/issue-creation/SKILL.md +0 -118
  1156. package/skills/lint-package-suggestion/SKILL.md +0 -37
  1157. package/skills/new-method-implementation/SKILL.md +0 -71
  1158. package/skills/parse-date-time/SKILL.md +0 -349
  1159. package/skills/pr-contribution/SKILL.md +0 -180
  1160. package/skills/unit-test-generation/SKILL.md +0 -56
  1161. package/skills/validate-dates/SKILL.md +0 -438
  1162. package/skills/zoned-date-ops/SKILL.md +0 -422
  1163. package/skills/zoned-date-ops/references/timezones.md +0 -13
@@ -4,36 +4,58 @@ import type { DateTimeDurationUnit, RoundingOptions } from "../../types/index.js
4
4
  * Return the difference between two zoned datetimes measured in the given date-time unit.
5
5
  *
6
6
  * - Uses Temporal.ZonedDateTime.until to calculate difference.
7
- * - Converts both to UTC for consistent calculation.
7
+ * - Follows Temporal's DifferenceZonedDateTime: calendar units (days, weeks, months, years) are
8
+ * measured on the zone's own wall clock, so a 23-hour DST day is 1 day and a month from Jan 31
9
+ * follows the local date; time units (hours and smaller) are exact elapsed time.
10
+ * - Two values in different time zones (by TC39 TimeZoneEquals, so `UTC` equals `Etc/UTC`) can
11
+ * only be differenced in time units: a calendar largest unit returns null, because day lengths
12
+ * differ between zones.
13
+ * - Compatibility: before 1.16.0 both values were converted to UTC first, so calendar units were
14
+ * measured on the UTC clock and mixed zones were accepted. To get that value, difference the UTC
15
+ * instants: `diffUtc(convertZonedToUtc(value1), convertZonedToUtc(value2), units)`.
8
16
  * - Supports single unit or array of units.
9
- * - Accepts GMT calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) —
10
- * E7 (issue #152). When BOTH endpoints carry the same calendar tag, calendar units are measured
11
- * in that calendar (a Hebrew leap year spans 13 month boundaries, not 14). When the tags
12
- * mismatch, or either endpoint is a bare ISO string, the measurement falls back to
13
- * Gregorian/ISO rather than returning the sentinel (E7's D5-zoned). That fallback is mandatory
14
- * here, not a convenience: `Temporal.ZonedDateTime.prototype.until` throws across mismatched
15
- * calendars for EVERY `largestUnit` — verified, including `"hour"` and `"nanosecond"` — so
16
- * without it a purely time-unit question like "how many hours between these two moments" would
17
- * return null just because the two strings named different calendars.
17
+ * - Accepts RFC 9557 calendar-annotated zoned strings (as `convertZonedToCalendar` writes them;
18
+ * E7, issue #152). When BOTH endpoints name the same calendar, calendar units are measured in
19
+ * that calendar (a Hebrew leap year spans 13 months, not 12). When they name different calendars
20
+ * (a bare ISO string names `iso8601`), the result is `null` for every unit, hours included, as
21
+ * TC39 `DifferenceTemporalZonedDateTime` throws when `CalendarEquals` is false.
22
+ * - Compatibility: before 1.16.0 two different calendars were measured in ISO. To get that value,
23
+ * convert both to one calendar first: `convertZonedToCalendar(value, "iso8601")`.
18
24
  * - Returns null for invalid input.
19
25
  *
20
26
  * `smallestUnit`, `roundingIncrement`, and `roundingMode` control optional rounding of the result,
21
27
  * per Temporal's DifferenceOptions — e.g. `{ smallestUnit: "hour", roundingMode: "halfExpand" }`
22
28
  * rounds the difference to the nearest hour before extracting the requested unit.
23
29
  * - When `units` is an array, `smallestUnit` must not be coarser than the largest unit in the
24
- * array (e.g. `["day", "hour"]` with `smallestUnit: "week"`) — this combination is rejected by
30
+ * array (e.g. `["days", "hours"]` with `smallestUnit: "week"`) — this combination is rejected by
25
31
  * Temporal and returns null, same as other invalid input.
32
+ * - With an array of units, the record is the whole difference: the largest listed unit is
33
+ * Temporal's `largestUnit`, and the amount of each unlisted unit between two listed units is
34
+ * carried into the next smaller listed unit, measured from the start moved by the larger listed
35
+ * amounts (so adding the record to the start reaches the end). Units smaller than the smallest
36
+ * listed unit are truncated, as for a single unit. For example, `["years", "days"]` over
37
+ * 1 year 59 days returns `{ years: 1, days: 59 }`.
38
+ * Days carried into a time unit follow the zone's wall clock (a 23-hour DST day is 23 hours).
39
+ * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
40
+ * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
26
41
  *
27
42
  * @param value1 zoned ISO 8601 datetime string (start), optionally calendar-annotated
28
43
  * @param value2 zoned ISO 8601 datetime string (end), optionally calendar-annotated
29
- * @param units DateTimeDurationUnit | DateTimeDurationUnit[] to measure the difference
30
- * @param options optional: smallestUnit, roundingIncrement, roundingMode (Temporal.DifferenceOptions rounding controls)
44
+ * @param units date-time unit or units to measure the difference, singular or plural (`"day"` or
45
+ * `"days"`); a record result keeps the plural keys
46
+ * @param options optional: smallestUnit, roundingIncrement, roundingMode (Temporal.DifferenceOptions rounding controls); a non-object value (such as `null`) is invalid
31
47
  * @returns numeric difference in the requested unit, or null on invalid input
32
48
  *
33
49
  * @example diffZoned("2024-02-28T14:30:00+00:00[UTC]", "2024-03-01T15:30:00+00:00[UTC]", "days") // 2
50
+ * @example diffZoned("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-10T12:00:00-04:00[America/New_York]", "days") // 1 (a 23-hour local day)
51
+ * @example diffZoned("2024-01-01T00:00:00-05:00[America/New_York]", "2024-01-03T00:00:00+01:00[Europe/Paris]", "days") // null (calendar unit across two time zones)
52
+ * @example diffUtc(convertZonedToUtc("2024-03-09T12:00:00-05:00[America/New_York]"), convertZonedToUtc("2024-03-10T12:00:00-04:00[America/New_York]"), "days") // 0 (pre-1.16.0 UTC-clock result)
53
+ * @example diffZoned("2024-02-28T14:30:00+00:00[UTC]", "2024-03-01T15:30:00+00:00[UTC]", ["day", "hour"]) // { days: 2, hours: 1 } (singular names, plural keys)
34
54
  * @example diffZoned("invalid", "2024-03-01T15:30:00+00:00[UTC]", "days") // null
35
- * @example diffZoned("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "5785-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "months") // 13 (Hebrew leap year; the ISO equivalent is 12)
36
- * @example diffZoned("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "1446-03-30T00:00:00-04:00[u-ca=islamic-tabular][America/New_York]", "hours") // measured in Gregorian/ISO (mismatched tags fall back rather than returning null)
37
- * @example diffZoned("2024-03-10T14:30:00-04:00[America/New_York][u-ca=hebrew]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // null (Temporal's segment ordering is not GMT's grammar)
55
+ * @example diffZoned("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=hebrew]", "months") // 13 (Hebrew leap year 5784; the ISO equivalent is 12)
56
+ * @example diffZoned("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=islamic-tbla]", "hours") // null (different calendars)
57
+ * @example diffZoned("2024-03-10T14:30:00-04:00[u-ca=hebrew][America/New_York]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // null (calendar before zone is not RFC 9557)
58
+ * @example diffZoned("2024-01-01T00:00:00+00:00[UTC]", "2025-03-01T00:00:00+00:00[UTC]", ["years", "days"]) // { years: 1, days: 59 } (P1Y2M; the 2 months are carried into days)
59
+ * @example diffZoned("2024-02-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", ["months", "hours"]) // { months: 1, hours: 47 } (P1M2D; the 2 days include the 23-hour 2024-03-10)
38
60
  */
39
- export declare function diffZoned(value1: string, value2: string, units: DateTimeDurationUnit | DateTimeDurationUnit[], options?: RoundingOptions<Temporal.DateTimeUnit>): number | Record<DateTimeDurationUnit, number> | null;
61
+ export declare function diffZoned(value1: string, value2: string, units: DateTimeDurationUnit | Temporal.DateTimeUnit | Array<DateTimeDurationUnit | Temporal.DateTimeUnit>, options?: RoundingOptions<Temporal.DateTimeUnit>): number | Record<DateTimeDurationUnit, number> | null;
@@ -1,76 +1,121 @@
1
- import { parseCalendarZonedPairForArithmetic } from "../../internal/index.js";
1
+ import { addToZoned, isCalendarDifferenceAcrossZones, parseCalendarZonedPairForArithmetic, zonedUntil, } from "../../internal/index.js";
2
+ import { differenceRecord } from "../../internal/differenceRecord.js";
3
+ import { resolveDurationUnit } from "../../internal/resolveDurationUnit.js";
2
4
  import { getLargestDateTimeDurationUnit } from "../../plain/calculate/getLargestDateTimeDurationUnit.js";
3
5
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
4
6
  import { isValidCalendarZonedDateTime } from "../validate/index.js";
7
+ import { isOptionsArgument } from "../../internal/isObject.js";
5
8
  /**
6
9
  * Return the difference between two zoned datetimes measured in the given date-time unit.
7
10
  *
8
11
  * - Uses Temporal.ZonedDateTime.until to calculate difference.
9
- * - Converts both to UTC for consistent calculation.
12
+ * - Follows Temporal's DifferenceZonedDateTime: calendar units (days, weeks, months, years) are
13
+ * measured on the zone's own wall clock, so a 23-hour DST day is 1 day and a month from Jan 31
14
+ * follows the local date; time units (hours and smaller) are exact elapsed time.
15
+ * - Two values in different time zones (by TC39 TimeZoneEquals, so `UTC` equals `Etc/UTC`) can
16
+ * only be differenced in time units: a calendar largest unit returns null, because day lengths
17
+ * differ between zones.
18
+ * - Compatibility: before 1.16.0 both values were converted to UTC first, so calendar units were
19
+ * measured on the UTC clock and mixed zones were accepted. To get that value, difference the UTC
20
+ * instants: `diffUtc(convertZonedToUtc(value1), convertZonedToUtc(value2), units)`.
10
21
  * - Supports single unit or array of units.
11
- * - Accepts GMT calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) —
12
- * E7 (issue #152). When BOTH endpoints carry the same calendar tag, calendar units are measured
13
- * in that calendar (a Hebrew leap year spans 13 month boundaries, not 14). When the tags
14
- * mismatch, or either endpoint is a bare ISO string, the measurement falls back to
15
- * Gregorian/ISO rather than returning the sentinel (E7's D5-zoned). That fallback is mandatory
16
- * here, not a convenience: `Temporal.ZonedDateTime.prototype.until` throws across mismatched
17
- * calendars for EVERY `largestUnit` — verified, including `"hour"` and `"nanosecond"` — so
18
- * without it a purely time-unit question like "how many hours between these two moments" would
19
- * return null just because the two strings named different calendars.
22
+ * - Accepts RFC 9557 calendar-annotated zoned strings (as `convertZonedToCalendar` writes them;
23
+ * E7, issue #152). When BOTH endpoints name the same calendar, calendar units are measured in
24
+ * that calendar (a Hebrew leap year spans 13 months, not 12). When they name different calendars
25
+ * (a bare ISO string names `iso8601`), the result is `null` for every unit, hours included, as
26
+ * TC39 `DifferenceTemporalZonedDateTime` throws when `CalendarEquals` is false.
27
+ * - Compatibility: before 1.16.0 two different calendars were measured in ISO. To get that value,
28
+ * convert both to one calendar first: `convertZonedToCalendar(value, "iso8601")`.
20
29
  * - Returns null for invalid input.
21
30
  *
22
31
  * `smallestUnit`, `roundingIncrement`, and `roundingMode` control optional rounding of the result,
23
32
  * per Temporal's DifferenceOptions — e.g. `{ smallestUnit: "hour", roundingMode: "halfExpand" }`
24
33
  * rounds the difference to the nearest hour before extracting the requested unit.
25
34
  * - When `units` is an array, `smallestUnit` must not be coarser than the largest unit in the
26
- * array (e.g. `["day", "hour"]` with `smallestUnit: "week"`) — this combination is rejected by
35
+ * array (e.g. `["days", "hours"]` with `smallestUnit: "week"`) — this combination is rejected by
27
36
  * Temporal and returns null, same as other invalid input.
37
+ * - With an array of units, the record is the whole difference: the largest listed unit is
38
+ * Temporal's `largestUnit`, and the amount of each unlisted unit between two listed units is
39
+ * carried into the next smaller listed unit, measured from the start moved by the larger listed
40
+ * amounts (so adding the record to the start reaches the end). Units smaller than the smallest
41
+ * listed unit are truncated, as for a single unit. For example, `["years", "days"]` over
42
+ * 1 year 59 days returns `{ years: 1, days: 59 }`.
43
+ * Days carried into a time unit follow the zone's wall clock (a 23-hour DST day is 23 hours).
44
+ * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
45
+ * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
28
46
  *
29
47
  * @param value1 zoned ISO 8601 datetime string (start), optionally calendar-annotated
30
48
  * @param value2 zoned ISO 8601 datetime string (end), optionally calendar-annotated
31
- * @param units DateTimeDurationUnit | DateTimeDurationUnit[] to measure the difference
32
- * @param options optional: smallestUnit, roundingIncrement, roundingMode (Temporal.DifferenceOptions rounding controls)
49
+ * @param units date-time unit or units to measure the difference, singular or plural (`"day"` or
50
+ * `"days"`); a record result keeps the plural keys
51
+ * @param options optional: smallestUnit, roundingIncrement, roundingMode (Temporal.DifferenceOptions rounding controls); a non-object value (such as `null`) is invalid
33
52
  * @returns numeric difference in the requested unit, or null on invalid input
34
53
  *
35
54
  * @example diffZoned("2024-02-28T14:30:00+00:00[UTC]", "2024-03-01T15:30:00+00:00[UTC]", "days") // 2
55
+ * @example diffZoned("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-10T12:00:00-04:00[America/New_York]", "days") // 1 (a 23-hour local day)
56
+ * @example diffZoned("2024-01-01T00:00:00-05:00[America/New_York]", "2024-01-03T00:00:00+01:00[Europe/Paris]", "days") // null (calendar unit across two time zones)
57
+ * @example diffUtc(convertZonedToUtc("2024-03-09T12:00:00-05:00[America/New_York]"), convertZonedToUtc("2024-03-10T12:00:00-04:00[America/New_York]"), "days") // 0 (pre-1.16.0 UTC-clock result)
58
+ * @example diffZoned("2024-02-28T14:30:00+00:00[UTC]", "2024-03-01T15:30:00+00:00[UTC]", ["day", "hour"]) // { days: 2, hours: 1 } (singular names, plural keys)
36
59
  * @example diffZoned("invalid", "2024-03-01T15:30:00+00:00[UTC]", "days") // null
37
- * @example diffZoned("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "5785-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "months") // 13 (Hebrew leap year; the ISO equivalent is 12)
38
- * @example diffZoned("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "1446-03-30T00:00:00-04:00[u-ca=islamic-tabular][America/New_York]", "hours") // measured in Gregorian/ISO (mismatched tags fall back rather than returning null)
39
- * @example diffZoned("2024-03-10T14:30:00-04:00[America/New_York][u-ca=hebrew]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // null (Temporal's segment ordering is not GMT's grammar)
60
+ * @example diffZoned("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=hebrew]", "months") // 13 (Hebrew leap year 5784; the ISO equivalent is 12)
61
+ * @example diffZoned("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=islamic-tbla]", "hours") // null (different calendars)
62
+ * @example diffZoned("2024-03-10T14:30:00-04:00[u-ca=hebrew][America/New_York]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // null (calendar before zone is not RFC 9557)
63
+ * @example diffZoned("2024-01-01T00:00:00+00:00[UTC]", "2025-03-01T00:00:00+00:00[UTC]", ["years", "days"]) // { years: 1, days: 59 } (P1Y2M; the 2 months are carried into days)
64
+ * @example diffZoned("2024-02-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", ["months", "hours"]) // { months: 1, hours: 47 } (P1M2D; the 2 days include the 23-hour 2024-03-10)
40
65
  */
41
66
  export function diffZoned(value1, value2, units, options) {
42
- const validZonedDateTimes = isValidCalendarZonedDateTime(value1) &&
43
- isValidCalendarZonedDateTime(value2);
44
- const isSingleUnit = !Array.isArray(units);
45
- const validUnits = isSingleUnit
46
- ? isValidDateTimeDurationUnit(units)
47
- : units.every(isValidDateTimeDurationUnit);
48
- if (!validZonedDateTimes || !validUnits) {
49
- return null;
50
- }
51
67
  try {
52
- // Calendar resolution has to happen BEFORE the UTC normalization, and the normalization has
53
- // to preserve the calendar rather than discard it — the two are independent axes.
54
- // `withTimeZone` keeps the calendar tag intact (verified), so re-zoning both operands to UTC
55
- // still measures in the pair's resolved calendar.
56
- const { a, b } = parseCalendarZonedPairForArithmetic(value1, value2);
57
- const normalizedZdt1 = a.withTimeZone("UTC");
58
- const normalizedZdt2 = b.withTimeZone("UTC");
59
- const duration = normalizedZdt1.until(normalizedZdt2, {
60
- largestUnit: isSingleUnit ? units : getLargestDateTimeDurationUnit(units),
61
- smallestUnit: options?.smallestUnit,
62
- roundingIncrement: options?.roundingIncrement,
63
- roundingMode: options?.roundingMode,
64
- });
65
- if (isSingleUnit) {
66
- return duration[units] ?? 0;
68
+ // Temporal GetOptionsObject: options are an object or omitted; null and primitives are invalid.
69
+ if (!isOptionsArgument(options)) {
70
+ return null;
71
+ }
72
+ const validZonedDateTimes = isValidCalendarZonedDateTime(value1) &&
73
+ isValidCalendarZonedDateTime(value2);
74
+ // Singular names resolve to their plural (Temporal §13.17); record keys are the plural names.
75
+ const resolved = Array.isArray(units)
76
+ ? units.map((unit) => resolveDurationUnit(unit))
77
+ : resolveDurationUnit(units);
78
+ const isSingleUnit = !Array.isArray(resolved);
79
+ const validUnits = isSingleUnit
80
+ ? isValidDateTimeDurationUnit(resolved)
81
+ : resolved.every(isValidDateTimeDurationUnit);
82
+ if (!validZonedDateTimes || !validUnits) {
83
+ return null;
84
+ }
85
+ try {
86
+ const { a, b } = parseCalendarZonedPairForArithmetic(value1, value2);
87
+ const largestUnit = isSingleUnit
88
+ ? resolved
89
+ : getLargestDateTimeDurationUnit(resolved);
90
+ if (largestUnit === "")
91
+ return null;
92
+ if (isCalendarDifferenceAcrossZones(a, b, largestUnit)) {
93
+ return null;
94
+ }
95
+ const duration = zonedUntil(a, b, {
96
+ largestUnit,
97
+ smallestUnit: options?.smallestUnit,
98
+ roundingIncrement: options?.roundingIncrement,
99
+ roundingMode: options?.roundingMode,
100
+ });
101
+ if (isSingleUnit) {
102
+ return duration[resolved] ?? 0;
103
+ }
104
+ // An unlisted unit between two listed units is carried into the next smaller listed unit.
105
+ return differenceRecord(a, duration, resolved, {
106
+ add: (from, amount) => addToZoned(from, amount),
107
+ until: (from, to, largest) => zonedUntil(from, to, {
108
+ largestUnit: largest,
109
+ }),
110
+ });
111
+ }
112
+ catch {
113
+ return null;
67
114
  }
68
- return units.reduce((result, unit) => {
69
- result[unit] = duration[unit] ?? 0;
70
- return result;
71
- }, {});
72
115
  }
73
116
  catch {
117
+ // Never throws (Core Rule 3): a hostile
118
+ // argument is invalid input, not an exception.
74
119
  return null;
75
120
  }
76
121
  }
@@ -5,9 +5,14 @@ import type { DateTimeDurationUnit, DurationStringOptions, RoundingOptions } fro
5
5
  * bridging to the `duration` namespace (see `parseDuration`, `normalizeDuration`).
6
6
  *
7
7
  * - Uses Temporal.ZonedDateTime.until with `largestUnit` set to `unit`, then `.toString()`.
8
- * - Converts both to UTC for consistent calculation, same as `diffZoned`.
9
- * - Accepts GMT calendar-annotated zoned strings, with the same shared-calendar-or-Gregorian-
10
- * fallback policy as `diffZoned` (E7's D5-zoned, issue #152).
8
+ * - Measures like `diffZoned` (Temporal's DifferenceZonedDateTime): calendar units on the zone's
9
+ * own wall clock, time units in exact elapsed time. Values in different time zones with a
10
+ * calendar `unit` (days or larger) return "".
11
+ * - Compatibility: before 1.16.0 both values were converted to UTC first. To get that value:
12
+ * `diffUtcAsDuration(convertZonedToUtc(value1), convertZonedToUtc(value2), unit)`.
13
+ * - Accepts RFC 9557 calendar-annotated zoned strings, with the same calendar rule as `diffZoned`:
14
+ * measured in the shared calendar, `""` when the two name different calendars (TC39
15
+ * `CalendarEquals`; before 1.16.0 measured in ISO).
11
16
  * - Unlike `diffZoned`, `unit` is a single unit (not an array) — an ISO duration string
12
17
  * already expresses a full multi-unit breakdown via `largestUnit` alone, so there's no
13
18
  * array-of-units overload here.
@@ -21,16 +26,21 @@ import type { DateTimeDurationUnit, DurationStringOptions, RoundingOptions } fro
21
26
  * above because both option sets have colliding `smallestUnit`/`roundingMode` keys with
22
27
  * different Temporal types.
23
28
  *
29
+ * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
30
+ * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
31
+ *
24
32
  * @param value1 zoned ISO 8601 datetime string (start), optionally calendar-annotated
25
33
  * @param value2 zoned ISO 8601 datetime string (end), optionally calendar-annotated
26
- * @param unit DateTimeDurationUnit to use as the duration's largestUnit
27
- * @param options optional: smallestUnit, roundingIncrement, roundingMode (.until() rounding); toStringSmallestUnit, fractionalSecondDigits, toStringRoundingMode (.toString() precision)
34
+ * @param unit date-time unit to use as the duration's largestUnit, singular or plural (`"day"` or `"days"`)
35
+ * @param options optional: smallestUnit, roundingIncrement, roundingMode (.until() rounding); toStringSmallestUnit, fractionalSecondDigits, toStringRoundingMode (.toString() precision); a non-object value (such as `null`) is invalid
28
36
  * @returns ISO 8601 duration string, or "" on invalid input
29
37
  *
30
- * @example diffZonedAsDuration("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", "days") // "P1DT23H"
38
+ * @example diffZonedAsDuration("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", "days") // "P2D" (wall-clock days; 47 elapsed hours)
31
39
  * @example diffZonedAsDuration("2028-01-01T00:00:00+00:00[UTC]", "2028-01-01T00:00:00+00:00[UTC]", "hours") // "PT0S"
40
+ * @example diffZonedAsDuration("2028-01-01T00:00:00+00:00[UTC]", "2028-01-02T13:00:00+13:00[Pacific/Apia]", "days") // "" (calendar unit across two time zones)
41
+ * @example diffUtcAsDuration(convertZonedToUtc("2024-03-09T12:00:00-05:00[America/New_York]"), convertZonedToUtc("2024-03-11T12:00:00-04:00[America/New_York]"), "days") // "P1DT23H" (pre-1.16.0 UTC-clock result)
32
42
  * @example diffZonedAsDuration("invalid", "2028-01-01T00:00:00+00:00[UTC]", "days") // ""
33
- * @example diffZonedAsDuration("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "5785-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "months") // "P13M" (Hebrew leap year)
34
- * @example diffZonedAsDuration("2024-03-10T14:30:00-04:00[America/New_York][u-ca=hebrew]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // "" (Temporal's segment ordering is not GMT's grammar)
43
+ * @example diffZonedAsDuration("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=hebrew]", "months") // "P13M" (Hebrew leap year 5784)
44
+ * @example diffZonedAsDuration("2024-03-10T14:30:00-04:00[u-ca=hebrew][America/New_York]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // "" (calendar before zone is not RFC 9557)
35
45
  */
36
- export declare function diffZonedAsDuration(value1: string, value2: string, unit: DateTimeDurationUnit, options?: RoundingOptions<Temporal.DateTimeUnit> & DurationStringOptions): string;
46
+ export declare function diffZonedAsDuration(value1: string, value2: string, unit: DateTimeDurationUnit | Temporal.DateTimeUnit, options?: RoundingOptions<Temporal.DateTimeUnit> & DurationStringOptions): string;
@@ -1,14 +1,21 @@
1
- import { durationUntilString, parseCalendarZonedPairForArithmetic, } from "../../internal/index.js";
1
+ import { durationUntilString, isCalendarDifferenceAcrossZones, parseCalendarZonedPairForArithmetic, } from "../../internal/index.js";
2
+ import { resolveDurationUnit } from "../../internal/resolveDurationUnit.js";
2
3
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
3
4
  import { isValidCalendarZonedDateTime } from "../validate/index.js";
5
+ import { isOptionsArgument } from "../../internal/isObject.js";
4
6
  /**
5
7
  * Return the difference between two zoned datetimes as an ISO 8601 duration string,
6
8
  * bridging to the `duration` namespace (see `parseDuration`, `normalizeDuration`).
7
9
  *
8
10
  * - Uses Temporal.ZonedDateTime.until with `largestUnit` set to `unit`, then `.toString()`.
9
- * - Converts both to UTC for consistent calculation, same as `diffZoned`.
10
- * - Accepts GMT calendar-annotated zoned strings, with the same shared-calendar-or-Gregorian-
11
- * fallback policy as `diffZoned` (E7's D5-zoned, issue #152).
11
+ * - Measures like `diffZoned` (Temporal's DifferenceZonedDateTime): calendar units on the zone's
12
+ * own wall clock, time units in exact elapsed time. Values in different time zones with a
13
+ * calendar `unit` (days or larger) return "".
14
+ * - Compatibility: before 1.16.0 both values were converted to UTC first. To get that value:
15
+ * `diffUtcAsDuration(convertZonedToUtc(value1), convertZonedToUtc(value2), unit)`.
16
+ * - Accepts RFC 9557 calendar-annotated zoned strings, with the same calendar rule as `diffZoned`:
17
+ * measured in the shared calendar, `""` when the two name different calendars (TC39
18
+ * `CalendarEquals`; before 1.16.0 measured in ISO).
12
19
  * - Unlike `diffZoned`, `unit` is a single unit (not an array) — an ISO duration string
13
20
  * already expresses a full multi-unit breakdown via `largestUnit` alone, so there's no
14
21
  * array-of-units overload here.
@@ -22,32 +29,42 @@ import { isValidCalendarZonedDateTime } from "../validate/index.js";
22
29
  * above because both option sets have colliding `smallestUnit`/`roundingMode` keys with
23
30
  * different Temporal types.
24
31
  *
32
+ * - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the `[u-ca=<id>]`
33
+ * annotation after the zone, canonical calendar ids); see `isValidCalendarZonedDateTime`.
34
+ *
25
35
  * @param value1 zoned ISO 8601 datetime string (start), optionally calendar-annotated
26
36
  * @param value2 zoned ISO 8601 datetime string (end), optionally calendar-annotated
27
- * @param unit DateTimeDurationUnit to use as the duration's largestUnit
28
- * @param options optional: smallestUnit, roundingIncrement, roundingMode (.until() rounding); toStringSmallestUnit, fractionalSecondDigits, toStringRoundingMode (.toString() precision)
37
+ * @param unit date-time unit to use as the duration's largestUnit, singular or plural (`"day"` or `"days"`)
38
+ * @param options optional: smallestUnit, roundingIncrement, roundingMode (.until() rounding); toStringSmallestUnit, fractionalSecondDigits, toStringRoundingMode (.toString() precision); a non-object value (such as `null`) is invalid
29
39
  * @returns ISO 8601 duration string, or "" on invalid input
30
40
  *
31
- * @example diffZonedAsDuration("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", "days") // "P1DT23H"
41
+ * @example diffZonedAsDuration("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", "days") // "P2D" (wall-clock days; 47 elapsed hours)
32
42
  * @example diffZonedAsDuration("2028-01-01T00:00:00+00:00[UTC]", "2028-01-01T00:00:00+00:00[UTC]", "hours") // "PT0S"
43
+ * @example diffZonedAsDuration("2028-01-01T00:00:00+00:00[UTC]", "2028-01-02T13:00:00+13:00[Pacific/Apia]", "days") // "" (calendar unit across two time zones)
44
+ * @example diffUtcAsDuration(convertZonedToUtc("2024-03-09T12:00:00-05:00[America/New_York]"), convertZonedToUtc("2024-03-11T12:00:00-04:00[America/New_York]"), "days") // "P1DT23H" (pre-1.16.0 UTC-clock result)
33
45
  * @example diffZonedAsDuration("invalid", "2028-01-01T00:00:00+00:00[UTC]", "days") // ""
34
- * @example diffZonedAsDuration("5784-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "5785-01-01T00:00:00-04:00[u-ca=hebrew][America/New_York]", "months") // "P13M" (Hebrew leap year)
35
- * @example diffZonedAsDuration("2024-03-10T14:30:00-04:00[America/New_York][u-ca=hebrew]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // "" (Temporal's segment ordering is not GMT's grammar)
46
+ * @example diffZonedAsDuration("2023-09-16T00:00:00-04:00[America/New_York][u-ca=hebrew]", "2024-10-03T00:00:00-04:00[America/New_York][u-ca=hebrew]", "months") // "P13M" (Hebrew leap year 5784)
47
+ * @example diffZonedAsDuration("2024-03-10T14:30:00-04:00[u-ca=hebrew][America/New_York]", "2024-03-11T14:30:00-04:00[America/New_York]", "days") // "" (calendar before zone is not RFC 9557)
36
48
  */
37
49
  export function diffZonedAsDuration(value1, value2, unit, options) {
50
+ // Temporal GetOptionsObject: options are an object or omitted; null and primitives are invalid.
51
+ if (!isOptionsArgument(options)) {
52
+ return "";
53
+ }
38
54
  const validZonedDateTimes = isValidCalendarZonedDateTime(value1) &&
39
55
  isValidCalendarZonedDateTime(value2);
40
- const validUnit = isValidDateTimeDurationUnit(unit);
56
+ // Singular names resolve to their plural (Temporal §13.17).
57
+ const resolvedUnit = resolveDurationUnit(unit);
58
+ const validUnit = isValidDateTimeDurationUnit(resolvedUnit);
41
59
  if (!validZonedDateTimes || !validUnit) {
42
60
  return "";
43
61
  }
44
62
  try {
45
- // Calendar resolution before UTC normalization, and the normalization preserves the calendar
46
- // — see `diffZoned`'s equivalent comment.
47
63
  const { a, b } = parseCalendarZonedPairForArithmetic(value1, value2);
48
- const normalizedZdt1 = a.withTimeZone("UTC");
49
- const normalizedZdt2 = b.withTimeZone("UTC");
50
- return durationUntilString(normalizedZdt1, normalizedZdt2, unit, options);
64
+ if (isCalendarDifferenceAcrossZones(a, b, resolvedUnit)) {
65
+ return "";
66
+ }
67
+ return durationUntilString(a, b, resolvedUnit, options);
51
68
  }
52
69
  catch {
53
70
  return "";
@@ -1,25 +1,25 @@
1
- import type { Disambiguation, FractionalDigit, Offset } from "../../types/index.js";
1
+ import type { FractionalDigit } from "../../types/index.js";
2
2
  /**
3
3
  * Return the end of the quarter for a given zoned ISO datetime.
4
4
  *
5
5
  * - Calculates which quarter (1-4) the date falls into and returns the last moment of that quarter.
6
- * - `disambiguation` controls DST gap/overlap resolution when a quarter boundary lands on an ambiguous local time: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
7
- * - `offset` controls whether the source's existing UTC offset is kept when computing a new boundary: "prefer" (Temporal's own default — keeps the source offset whenever still valid, which **makes `disambiguation` inert** in the (rare) common-zone case since quarter boundaries don't fall on DST transitions), "use", "ignore" (**this function's default** — always recomputes from time zone + local time, discarding the stale offset; this is what makes `disambiguation` actually take effect where a quarter boundary does coincide with a transition), or "reject" (throws if the source offset is invalid for the new fields, independent of `disambiguation`). Leave `offset` at its default unless you specifically need Temporal's raw `.with()` semantics.
8
- * - `fractionalSecondDigits` controls how many fractional seconds are included in the output: 0 (default — no fractional seconds), 3 (milliseconds), 6 (microseconds), or 9 (nanoseconds).
6
+ * - Returns one nanosecond before the next local quarter starts in `value`'s own zone (see `floorToZone`), so the result is never before `value`: a quarter whose last local hour repeats (`Africa/Cairo`, 2010-09-30) ends with the second pass.
7
+ * - The end is written at nanosecond precision by default, so the string names the end itself; an explicit `fractionalSecondDigits` (0, 3, 6 or 9) truncates it, as Temporal's `toString` does.
9
8
  * - Validation is performed on the input.
9
+ * - **Compatibility:** before 1.16.0 the default printed no fractional digits, which wrote a moment
10
+ * earlier than the end. Pass `{ fractionalSecondDigits: 0 }` to keep the previous string.
10
11
  *
11
12
  * @param value ISO ZonedDateTime string
12
- * @param optionsArg optional: disambiguation ("compatible" | "earlier" | "later" | "reject"), offset ("prefer" | "use" | "ignore" | "reject", default "ignore"), fractionalSecondDigits (0 | 3 | 6 | 9, default 0)
13
+ * @param optionsArg optional: fractionalSecondDigits (0 | 3 | 6 | 9, default 9)
13
14
  * @returns ISO ZonedDateTime string for the end of the quarter, or "" on invalid input
14
15
  *
15
- * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]") // "2024-03-31T23:59:59+00:00[UTC]"
16
- * @example endOfQuarterForZoned("2024-05-10T10:00:00+00:00[UTC]") // "2024-06-30T23:59:59+00:00[UTC]"
17
- * @example endOfQuarterForZoned("2024-11-20T08:00:00+00:00[UTC]") // "2024-12-31T23:59:59+00:00[UTC]"
18
- * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 9 }) // "2024-03-31T23:59:59.999999999+00:00[UTC]"
16
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]") // "2024-03-31T23:59:59.999999999+00:00[UTC]"
17
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 0 }) // "2024-03-31T23:59:59+00:00[UTC]" — the pre-1.16.0 string
18
+ * @example endOfQuarterForZoned("2024-05-10T10:00:00+00:00[UTC]") // "2024-06-30T23:59:59.999999999+00:00[UTC]"
19
+ * @example endOfQuarterForZoned("2024-11-20T08:00:00+00:00[UTC]") // "2024-12-31T23:59:59.999999999+00:00[UTC]"
20
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 3 }) // "2024-03-31T23:59:59.999+00:00[UTC]"
19
21
  * @example endOfQuarterForZoned("invalid") // ""
20
22
  */
21
23
  export declare function endOfQuarterForZoned(value: string, optionsArg?: {
22
- disambiguation?: Disambiguation;
23
- offset?: Offset;
24
24
  fractionalSecondDigits?: FractionalDigit;
25
25
  }): string;
@@ -1,50 +1,51 @@
1
- import { Temporal } from "@js-temporal/polyfill";
1
+ import { zonedDateTimeFrom, zonedUnitEnd } from "../../internal/index.js";
2
2
  import { isValidZonedDateTime } from "../validate/index.js";
3
+ import { isOptionsArgument } from "../../internal/isObject.js";
3
4
  /**
4
5
  * Return the end of the quarter for a given zoned ISO datetime.
5
6
  *
6
7
  * - Calculates which quarter (1-4) the date falls into and returns the last moment of that quarter.
7
- * - `disambiguation` controls DST gap/overlap resolution when a quarter boundary lands on an ambiguous local time: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
8
- * - `offset` controls whether the source's existing UTC offset is kept when computing a new boundary: "prefer" (Temporal's own default — keeps the source offset whenever still valid, which **makes `disambiguation` inert** in the (rare) common-zone case since quarter boundaries don't fall on DST transitions), "use", "ignore" (**this function's default** — always recomputes from time zone + local time, discarding the stale offset; this is what makes `disambiguation` actually take effect where a quarter boundary does coincide with a transition), or "reject" (throws if the source offset is invalid for the new fields, independent of `disambiguation`). Leave `offset` at its default unless you specifically need Temporal's raw `.with()` semantics.
9
- * - `fractionalSecondDigits` controls how many fractional seconds are included in the output: 0 (default — no fractional seconds), 3 (milliseconds), 6 (microseconds), or 9 (nanoseconds).
8
+ * - Returns one nanosecond before the next local quarter starts in `value`'s own zone (see `floorToZone`), so the result is never before `value`: a quarter whose last local hour repeats (`Africa/Cairo`, 2010-09-30) ends with the second pass.
9
+ * - The end is written at nanosecond precision by default, so the string names the end itself; an explicit `fractionalSecondDigits` (0, 3, 6 or 9) truncates it, as Temporal's `toString` does.
10
10
  * - Validation is performed on the input.
11
+ * - **Compatibility:** before 1.16.0 the default printed no fractional digits, which wrote a moment
12
+ * earlier than the end. Pass `{ fractionalSecondDigits: 0 }` to keep the previous string.
11
13
  *
12
14
  * @param value ISO ZonedDateTime string
13
- * @param optionsArg optional: disambiguation ("compatible" | "earlier" | "later" | "reject"), offset ("prefer" | "use" | "ignore" | "reject", default "ignore"), fractionalSecondDigits (0 | 3 | 6 | 9, default 0)
15
+ * @param optionsArg optional: fractionalSecondDigits (0 | 3 | 6 | 9, default 9)
14
16
  * @returns ISO ZonedDateTime string for the end of the quarter, or "" on invalid input
15
17
  *
16
- * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]") // "2024-03-31T23:59:59+00:00[UTC]"
17
- * @example endOfQuarterForZoned("2024-05-10T10:00:00+00:00[UTC]") // "2024-06-30T23:59:59+00:00[UTC]"
18
- * @example endOfQuarterForZoned("2024-11-20T08:00:00+00:00[UTC]") // "2024-12-31T23:59:59+00:00[UTC]"
19
- * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 9 }) // "2024-03-31T23:59:59.999999999+00:00[UTC]"
18
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]") // "2024-03-31T23:59:59.999999999+00:00[UTC]"
19
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 0 }) // "2024-03-31T23:59:59+00:00[UTC]" — the pre-1.16.0 string
20
+ * @example endOfQuarterForZoned("2024-05-10T10:00:00+00:00[UTC]") // "2024-06-30T23:59:59.999999999+00:00[UTC]"
21
+ * @example endOfQuarterForZoned("2024-11-20T08:00:00+00:00[UTC]") // "2024-12-31T23:59:59.999999999+00:00[UTC]"
22
+ * @example endOfQuarterForZoned("2024-02-15T14:30:00+00:00[UTC]", { fractionalSecondDigits: 3 }) // "2024-03-31T23:59:59.999+00:00[UTC]"
20
23
  * @example endOfQuarterForZoned("invalid") // ""
21
24
  */
22
25
  export function endOfQuarterForZoned(value, optionsArg) {
23
- if (!isValidZonedDateTime(value)) {
24
- return "";
25
- }
26
- const disambiguation = optionsArg?.disambiguation ?? "compatible";
27
- const offset = optionsArg?.offset ?? "ignore";
28
- const fractionalSecondDigits = optionsArg?.fractionalSecondDigits ?? 0;
29
26
  try {
30
- const zdt = Temporal.ZonedDateTime.from(value);
31
- const month = zdt.month;
32
- const quarterEndMonth = Math.floor((month - 1) / 3) * 3 + 3;
33
- const quarterStart = zdt.with({ month: quarterEndMonth, day: 1, hour: 0, minute: 0, second: 0 }, { disambiguation, offset });
34
- const nextQuarterStart = quarterStart.add({ months: 1 });
35
- const lastDayOfQuarter = nextQuarterStart.subtract({ days: 1 });
36
- return lastDayOfQuarter
37
- .with({
38
- hour: 23,
39
- minute: 59,
40
- second: 59,
41
- millisecond: 999,
42
- microsecond: 999,
43
- nanosecond: 999,
44
- }, { disambiguation, offset })
45
- .toString({ fractionalSecondDigits });
27
+ if (!isOptionsArgument(optionsArg)) {
28
+ return "";
29
+ }
30
+ if (!isValidZonedDateTime(value)) {
31
+ return "";
32
+ }
33
+ // An end is next start − 1 ns, so it defaults to nanosecond precision: fewer digits would
34
+ // print an earlier instant than the end (Calendar & zone semantics §3).
35
+ const fractionalSecondDigits = optionsArg?.fractionalSecondDigits === undefined
36
+ ? 9
37
+ : optionsArg.fractionalSecondDigits;
38
+ try {
39
+ const end = zonedUnitEnd(zonedDateTimeFrom(value), "quarter");
40
+ return end ? end.toString({ fractionalSecondDigits }) : "";
41
+ }
42
+ catch {
43
+ return "";
44
+ }
46
45
  }
47
46
  catch {
47
+ // Never throws (Core Rule 3): a hostile
48
+ // argument is invalid input, not an exception.
48
49
  return "";
49
50
  }
50
51
  }
@@ -1,28 +1,35 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import type { Disambiguation, FractionalDigit, Offset } from "../../types/index.js";
1
+ import type { Temporal } from "@js-temporal/polyfill";
2
+ import type { DateTimeUnit, FractionalDigit } from "../../types/index.js";
3
3
  /**
4
4
  * Return the end of the specified date-time `unit` for a given zoned ISO 8601 datetime string.
5
5
  *
6
- * - Converts to ZonedDateTime, sets to end of unit, converts back to string.
7
- * - Supports: "year", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond".
8
- * - `disambiguation` controls DST gap/overlap resolution when the boundary jump lands on an ambiguous local time: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
9
- * - `offset` controls whether the source's existing UTC offset is kept when computing the new boundary: "prefer" (Temporal's own default — keeps the source offset whenever still valid, which **makes `disambiguation` inert** for almost every case here since the source offset is nearly always still valid after a same-day field reset), "use", "ignore" (**this function's default** — always recomputes from time zone + local time, discarding the stale offset; this is what makes `disambiguation` actually take effect), or "reject" (throws if the source offset is invalid for the new fields, independent of `disambiguation`). Leave `offset` at its default unless you specifically need Temporal's raw `.with()` semantics.
6
+ * - Supports: "year", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond", each also in its plural form (`"days"`), as Temporal accepts.
7
+ * - `weekStartsOn` other than `"monday"` or `"sunday"` returns "".
8
+ * - Returns the last instant of the real local `unit` containing `value` in its own zone — one nanosecond before the next bucket `floorToZone` would return — so the result is never before `value`. The second pass of New York's repeated fall-back hour ends at 01:59:59.999999999 −05:00, and `Australia/Lord_Howe`'s 90-minute fall-back hour ends in its new offset.
9
+ * - A transition that reopens the previous local date makes that stretch its own bucket: `America/Goose_Bay`'s 00:01 fall-back on 7 November 2010 re-entered 6 November for 59 minutes, so the day holding `2010-11-06T23:30:00-04:00` ends at 23:59:59.999999999 −04:00.
10
+ * - A midnight repeated on the same date stays one day: `America/Havana`'s 25-hour 2024-11-03 ends at 23:59:59.999999999 −05:00 from either pass of its repeated first hour.
11
+ * - Takes no `disambiguation` or `offset`: a boundary is always a real instant, as TC39's `startOfDay()`
12
+ * takes neither. Those ignored options were removed in 1.16.0.
13
+ * - The end is written at nanosecond precision by default, so the string names the end itself; an explicit `fractionalSecondDigits` (0, 3, 6 or 9) truncates it, as Temporal's `toString` does.
10
14
  * - Returns "" for invalid input.
15
+ * - **Compatibility:** before 1.16.0 the default printed only the digits the unit names — none for
16
+ * `second` and coarser, 3 for `millisecond`, 6 for `microsecond` — which wrote a moment earlier
17
+ * than the end. Pass that `fractionalSecondDigits` to keep the previous string.
11
18
  *
12
19
  * @param value zoned ISO 8601 datetime string
13
- * @param unit Temporal.DateUnit|Temporal.TimeUnit to specify the unit for the end
14
- * @param options optional: weekStartsOn ("monday" | "sunday"), fractionalSecondDigits (number), disambiguation ("compatible" | "earlier" | "later" | "reject"), offset ("prefer" | "use" | "ignore" | "reject", default "ignore")
20
+ * @param unit date or time unit, singular or plural, to specify the unit for the end
21
+ * @param options optional: weekStartsOn ("monday" | "sunday"), fractionalSecondDigits (number)
15
22
  * @returns zoned ISO 8601 string representing the end of the specified unit, or "" on invalid input
16
23
  *
17
24
  * @example endOfZoned("2024-02-29T12:34:56+00:00[UTC]", "month") // "2024-02-29T23:59:59.999999999+00:00[UTC]"
25
+ * @example endOfZoned("2024-02-29T12:34:56+00:00[UTC]", "month", { fractionalSecondDigits: 0 }) // "2024-02-29T23:59:59+00:00[UTC]" — the pre-1.16.0 string
26
+ * @example endOfZoned("2024-02-29T12:34:56+00:00[UTC]", "month", { fractionalSecondDigits: 3 }) // "2024-02-29T23:59:59.999+00:00[UTC]"
27
+ * @example endOfZoned("2024-02-29T12:34:56+01:00[Europe/Berlin]", "hours") // "2024-02-29T12:59:59.999999999+01:00[Europe/Berlin]"
18
28
  * @example endOfZoned("invalid", "month") // ""
19
- * @example endOfZoned("2024-11-03T01:15:00-05:00[America/New_York]", "hour", { disambiguation: "earlier" }) // "2024-11-03T01:59:59-04:00[America/New_York]" (source sits in the second, repeated 1am of the fall-back overlap; "earlier" resolves end-of-hour to the first (EDT) pass)
20
- * @example endOfZoned("2024-11-03T01:15:00-05:00[America/New_York]", "hour", { disambiguation: "reject" }) // "" (same overlap; "reject" throws because end-of-hour is ambiguous between the two 1am instants)
21
- * @example endOfZoned("2024-11-03T01:15:00-05:00[America/New_York]", "hour", { disambiguation: "reject", offset: "prefer" }) // "2024-11-03T01:59:59-05:00[America/New_York]" (setting offset to "prefer" makes disambiguation inert here — the source's -05:00 offset is still valid for 1am, so it's kept and "reject" never fires)
29
+ * @example endOfZoned("2024-11-03T01:15:00-05:00[America/New_York]", "hour") // "2024-11-03T01:59:59.999999999-05:00[America/New_York]" (the second, repeated 1am is its own hour)
30
+ * @example endOfZoned("2024-11-03T00:30:00-04:00[America/Havana]", "day") // "2024-11-03T23:59:59.999999999-05:00[America/Havana]" (midnight repeated on the same date: one 25-hour day)
22
31
  */
23
- export declare function endOfZoned(value: string, unit: Temporal.DateUnit | Temporal.TimeUnit, optionsArg?: {
32
+ export declare function endOfZoned(value: string, unit: Temporal.SmallestUnit<DateTimeUnit>, optionsArg?: {
24
33
  weekStartsOn?: "monday" | "sunday";
25
34
  fractionalSecondDigits?: FractionalDigit;
26
- disambiguation?: Disambiguation;
27
- offset?: Offset;
28
35
  }): string;