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