@northguild/gmt 1.18.0 → 1.19.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 (593) hide show
  1. package/README.md +55 -2920
  2. package/dist/calendar/calculate/bucketRange.d.ts +10 -2
  3. package/dist/calendar/calculate/bucketRange.js +18 -61
  4. package/dist/calendar/calculate/floorToZone.d.ts +10 -2
  5. package/dist/calendar/calculate/floorToZone.js +15 -7
  6. package/dist/calendar/hours/addOperatingTime.d.ts +6 -0
  7. package/dist/calendar/hours/addOperatingTime.js +7 -1
  8. package/dist/calendar/hours/isOpenAt.d.ts +6 -0
  9. package/dist/calendar/hours/isOpenAt.js +6 -0
  10. package/dist/calendar/hours/nextCloseAt.d.ts +6 -0
  11. package/dist/calendar/hours/nextCloseAt.js +7 -1
  12. package/dist/calendar/hours/nextOpenAt.d.ts +6 -0
  13. package/dist/calendar/hours/nextOpenAt.js +7 -1
  14. package/dist/calendar/hours/operatingIntervals.d.ts +5 -0
  15. package/dist/calendar/hours/operatingIntervals.js +5 -0
  16. package/dist/calendar/hours/operatingTimeBetween.d.ts +5 -0
  17. package/dist/calendar/hours/operatingTimeBetween.js +5 -0
  18. package/dist/calendar/hours/recurringWindows.d.ts +8 -1
  19. package/dist/calendar/hours/recurringWindows.js +12 -4
  20. package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
  21. package/dist/duration/calculate/durationFromUnits.js +67 -0
  22. package/dist/duration/calculate/getDurationUnit.d.ts +2 -2
  23. package/dist/duration/calculate/getDurationUnit.js +2 -2
  24. package/dist/duration/calculate/index.d.ts +3 -1
  25. package/dist/duration/calculate/index.js +3 -1
  26. package/dist/duration/calculate/negateDuration.d.ts +1 -1
  27. package/dist/duration/calculate/negateDuration.js +1 -1
  28. package/dist/duration/calculate/{durationAs.d.ts → totalDuration.d.ts} +25 -19
  29. package/dist/duration/calculate/{durationAs.js → totalDuration.js} +25 -19
  30. package/dist/duration/calculate/totalUnits.d.ts +49 -0
  31. package/dist/duration/calculate/totalUnits.js +73 -0
  32. package/dist/duration/compare/compareDurations.d.ts +1 -1
  33. package/dist/duration/compare/compareDurations.js +1 -1
  34. package/dist/duty/calculate/dutyDayFor.d.ts +38 -0
  35. package/dist/duty/calculate/dutyDayFor.js +71 -0
  36. package/dist/duty/calculate/dutyTotals.d.ts +24 -0
  37. package/dist/duty/calculate/dutyTotals.js +41 -0
  38. package/dist/duty/calculate/dutyViolations.d.ts +74 -0
  39. package/dist/duty/calculate/dutyViolations.js +65 -0
  40. package/dist/duty/calculate/evaluateDutyLog.d.ts +77 -0
  41. package/dist/duty/calculate/evaluateDutyLog.js +75 -0
  42. package/dist/duty/calculate/index.d.ts +7 -0
  43. package/dist/duty/calculate/index.js +7 -0
  44. package/dist/duty/calculate/longestRun.d.ts +28 -0
  45. package/dist/duty/calculate/longestRun.js +54 -0
  46. package/dist/duty/calculate/qualifyingRestPairs.d.ts +37 -0
  47. package/dist/duty/calculate/qualifyingRestPairs.js +58 -0
  48. package/dist/duty/calculate/qualifyingRests.d.ts +27 -0
  49. package/dist/duty/calculate/qualifyingRests.js +49 -0
  50. package/dist/duty/index.d.ts +3 -0
  51. package/dist/duty/index.js +4 -0
  52. package/dist/duty/validate/index.d.ts +1 -0
  53. package/dist/duty/validate/index.js +1 -0
  54. package/dist/duty/validate/isValidDutyLog.d.ts +24 -0
  55. package/dist/duty/validate/isValidDutyLog.js +34 -0
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.js +1 -0
  58. package/dist/instant/convert/classifyLocal.d.ts +5 -1
  59. package/dist/instant/convert/classifyLocal.js +16 -6
  60. package/dist/instant/convert/fromOffsetInstant.d.ts +4 -0
  61. package/dist/instant/convert/fromOffsetInstant.js +6 -1
  62. package/dist/instant/convert/resolveLocal.d.ts +7 -2
  63. package/dist/instant/convert/resolveLocal.js +16 -8
  64. package/dist/instant/convert/toOffsetInstant.d.ts +12 -8
  65. package/dist/instant/convert/toOffsetInstant.js +19 -11
  66. package/dist/instant/index.d.ts +1 -0
  67. package/dist/instant/index.js +1 -0
  68. package/dist/instant/validate/index.d.ts +1 -0
  69. package/dist/instant/validate/index.js +1 -0
  70. package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
  71. package/dist/instant/validate/isValidUtcOffset.js +35 -0
  72. package/dist/intermodal/calculate/chargeableDays.d.ts +6 -0
  73. package/dist/intermodal/calculate/chargeableDays.js +12 -4
  74. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +7 -0
  75. package/dist/intermodal/calculate/freeTimeExpiry.js +15 -4
  76. package/dist/intermodal/calculate/index.d.ts +1 -0
  77. package/dist/intermodal/calculate/index.js +1 -0
  78. package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
  79. package/dist/intermodal/calculate/multimodalETA.js +145 -0
  80. package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
  81. package/dist/intermodal/format/bolTimestamp.js +78 -0
  82. package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
  83. package/dist/intermodal/format/formatEdifactDate.js +42 -0
  84. package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
  85. package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
  86. package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
  87. package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
  88. package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
  89. package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
  90. package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
  91. package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
  92. package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
  93. package/dist/intermodal/format/formatEdifactTime.js +43 -0
  94. package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
  95. package/dist/intermodal/format/formatEpcisEvent.js +79 -0
  96. package/dist/intermodal/format/formatX12Date.d.ts +35 -0
  97. package/dist/intermodal/format/formatX12Date.js +43 -0
  98. package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
  99. package/dist/intermodal/format/formatX12DateRange.js +45 -0
  100. package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
  101. package/dist/intermodal/format/formatX12DateTime.js +47 -0
  102. package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
  103. package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
  104. package/dist/intermodal/format/formatX12Time.d.ts +42 -0
  105. package/dist/intermodal/format/formatX12Time.js +50 -0
  106. package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
  107. package/dist/intermodal/format/formatX12TimeElement.js +54 -0
  108. package/dist/intermodal/format/index.d.ts +14 -0
  109. package/dist/intermodal/format/index.js +14 -0
  110. package/dist/intermodal/index.d.ts +3 -0
  111. package/dist/intermodal/index.js +3 -0
  112. package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
  113. package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
  114. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
  115. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
  116. package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
  117. package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
  118. package/dist/intermodal/parse/index.d.ts +18 -0
  119. package/dist/intermodal/parse/index.js +18 -0
  120. package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
  121. package/dist/intermodal/parse/parseEdifactDate.js +45 -0
  122. package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
  123. package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
  124. package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
  125. package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
  126. package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
  127. package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
  128. package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
  129. package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
  130. package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
  131. package/dist/intermodal/parse/parseEdifactTime.js +45 -0
  132. package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
  133. package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
  134. package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
  135. package/dist/intermodal/parse/parseX12Date.js +47 -0
  136. package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
  137. package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
  138. package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
  139. package/dist/intermodal/parse/parseX12DateRange.js +52 -0
  140. package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
  141. package/dist/intermodal/parse/parseX12DateTime.js +53 -0
  142. package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
  143. package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
  144. package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
  145. package/dist/intermodal/parse/parseX12Time.js +77 -0
  146. package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
  147. package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
  148. package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
  149. package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
  150. package/dist/intermodal/validate/index.d.ts +18 -0
  151. package/dist/intermodal/validate/index.js +18 -0
  152. package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
  153. package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
  154. package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
  155. package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
  156. package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
  157. package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
  158. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
  159. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
  160. package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
  161. package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
  162. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
  163. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
  164. package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
  165. package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
  166. package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
  167. package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
  168. package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
  169. package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
  170. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
  171. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
  172. package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
  173. package/dist/intermodal/validate/isValidX12Date.js +30 -0
  174. package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
  175. package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
  176. package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
  177. package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
  178. package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
  179. package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
  180. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
  181. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
  182. package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
  183. package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
  184. package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
  185. package/dist/intermodal/validate/isValidX12Time.js +40 -0
  186. package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
  187. package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
  188. package/dist/internal/businessCalendar.js +4 -9
  189. package/dist/internal/dutyEngine.d.ts +125 -0
  190. package/dist/internal/dutyEngine.js +1746 -0
  191. package/dist/internal/dutyLog.d.ts +27 -0
  192. package/dist/internal/dutyLog.js +47 -0
  193. package/dist/internal/dutyPeriods.d.ts +135 -0
  194. package/dist/internal/dutyPeriods.js +369 -0
  195. package/dist/internal/dutyRules.d.ts +197 -0
  196. package/dist/internal/dutyRules.js +484 -0
  197. package/dist/internal/ediDateTimeFields.d.ts +97 -0
  198. package/dist/internal/ediDateTimeFields.js +288 -0
  199. package/dist/internal/ediDateTimeWriter.d.ts +92 -0
  200. package/dist/internal/ediDateTimeWriter.js +298 -0
  201. package/dist/internal/ediGrammar.d.ts +158 -0
  202. package/dist/internal/ediGrammar.js +384 -0
  203. package/dist/internal/englishCalendarNames.d.ts +3 -1
  204. package/dist/internal/englishCalendarNames.js +3 -1
  205. package/dist/internal/freeTimeLedger.d.ts +5 -0
  206. package/dist/internal/freeTimeLedger.js +11 -2
  207. package/dist/internal/index.d.ts +5 -2
  208. package/dist/internal/index.js +9 -2
  209. package/dist/internal/intervalNanoseconds.js +2 -1
  210. package/dist/internal/isObject.d.ts +13 -6
  211. package/dist/internal/isObject.js +14 -7
  212. package/dist/internal/isoYearString.d.ts +21 -0
  213. package/dist/internal/isoYearString.js +27 -0
  214. package/dist/internal/maxPieces.js +2 -1
  215. package/dist/internal/normalizeTimeZone.d.ts +4 -1
  216. package/dist/internal/normalizeTimeZone.js +4 -1
  217. package/dist/internal/operatingSchedule.d.ts +13 -4
  218. package/dist/internal/operatingSchedule.js +146 -58
  219. package/dist/internal/patternToken.d.ts +10 -3
  220. package/dist/internal/patternToken.js +31 -12
  221. package/dist/internal/readDurationUnits.d.ts +34 -0
  222. package/dist/internal/readDurationUnits.js +78 -0
  223. package/dist/internal/readSetFields.d.ts +50 -0
  224. package/dist/internal/readSetFields.js +179 -0
  225. package/dist/internal/resolveRelativeUnit.d.ts +1 -1
  226. package/dist/internal/resolveRelativeUnit.js +1 -1
  227. package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
  228. package/dist/internal/resolveUnixIntervalPair.js +11 -7
  229. package/dist/internal/startOrEndOfUnix.d.ts +2 -1
  230. package/dist/internal/startOrEndOfUnix.js +9 -6
  231. package/dist/internal/twoDigitYear.d.ts +19 -0
  232. package/dist/internal/twoDigitYear.js +22 -0
  233. package/dist/internal/unixEpochValue.js +3 -2
  234. package/dist/internal/unixWallClock.d.ts +24 -0
  235. package/dist/internal/unixWallClock.js +35 -0
  236. package/dist/internal/utcWallClock.d.ts +20 -0
  237. package/dist/internal/utcWallClock.js +32 -0
  238. package/dist/internal/yearWindowStart.d.ts +28 -0
  239. package/dist/internal/yearWindowStart.js +52 -0
  240. package/dist/internal/zoneBucketCap.d.ts +18 -0
  241. package/dist/internal/zoneBucketCap.js +64 -0
  242. package/dist/internal/zoneFrame.d.ts +180 -0
  243. package/dist/internal/zoneFrame.js +221 -0
  244. package/dist/internal/zonedNowUnitValue.d.ts +7 -4
  245. package/dist/internal/zonedNowUnitValue.js +8 -4
  246. package/dist/internal/zonedWallClockDifference.js +4 -4
  247. package/dist/internal/zonedWallClockOperations.d.ts +5 -2
  248. package/dist/internal/zonedWallClockOperations.js +7 -10
  249. package/dist/plain/calculate/addDate.js +4 -7
  250. package/dist/plain/calculate/addDateTime.js +4 -7
  251. package/dist/plain/calculate/addTime.js +4 -7
  252. package/dist/plain/calculate/endOfTime.d.ts +1 -1
  253. package/dist/plain/calculate/setDate.d.ts +20 -3
  254. package/dist/plain/calculate/setDate.js +27 -7
  255. package/dist/plain/calculate/setDateTime.d.ts +15 -3
  256. package/dist/plain/calculate/setDateTime.js +22 -7
  257. package/dist/plain/calculate/setTime.d.ts +13 -1
  258. package/dist/plain/calculate/setTime.js +21 -6
  259. package/dist/plain/calculate/startOfTime.d.ts +1 -1
  260. package/dist/plain/calculate/subtractDate.js +4 -7
  261. package/dist/plain/calculate/subtractDateTime.js +4 -7
  262. package/dist/plain/calculate/subtractTime.js +4 -7
  263. package/dist/plain/format/formatCalendar.js +2 -1
  264. package/dist/plain/format/formatRelativeDate.js +2 -1
  265. package/dist/plain/format/formatRelativeDateTime.js +2 -1
  266. package/dist/plain/format/formatRelativeTime.js +2 -1
  267. package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
  268. package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +7 -7
  269. package/dist/plain/format/index.d.ts +1 -1
  270. package/dist/plain/format/index.js +1 -1
  271. package/dist/plain/get/getNowUnit.d.ts +2 -0
  272. package/dist/plain/get/getNowUnit.js +2 -0
  273. package/dist/plain/get/getYear.d.ts +2 -0
  274. package/dist/plain/get/getYear.js +4 -3
  275. package/dist/plain/interval/intervalXorAllDate.js +2 -2
  276. package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
  277. package/dist/plain/interval/intervalXorAllTime.js +2 -2
  278. package/dist/plain/interval/mergeIntervalsDate.js +2 -2
  279. package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
  280. package/dist/plain/interval/mergeIntervalsTime.js +2 -2
  281. package/dist/plain/parse/index.d.ts +1 -1
  282. package/dist/plain/parse/index.js +1 -1
  283. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +16 -3
  284. package/dist/plain/parse/parseDateTimeWithPattern.js +20 -5
  285. package/dist/plain/parse/parseDateWithPattern.d.ts +17 -3
  286. package/dist/plain/parse/parseDateWithPattern.js +21 -5
  287. package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
  288. package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +8 -8
  289. package/dist/plain/parse/parseTimeWithPattern.js +1 -0
  290. package/dist/plain/parse/parseUnitFromDate.d.ts +3 -0
  291. package/dist/plain/parse/parseUnitFromDate.js +5 -1
  292. package/dist/plain/parse/parseUnitFromDateTime.d.ts +3 -0
  293. package/dist/plain/parse/parseUnitFromDateTime.js +5 -1
  294. package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
  295. package/dist/plain/parse/parseYearFromDate.js +7 -3
  296. package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
  297. package/dist/plain/parse/parseYearFromDateTime.js +6 -3
  298. package/dist/plain/validate/index.d.ts +1 -0
  299. package/dist/plain/validate/index.js +1 -0
  300. package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
  301. package/dist/plain/validate/isValidSqlDateTime.js +36 -0
  302. package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
  303. package/dist/precision/convert/fromNanoseconds.js +9 -3
  304. package/dist/regex/epcis.d.ts +60 -0
  305. package/dist/regex/epcis.js +60 -0
  306. package/dist/regex/http-date.d.ts +6 -4
  307. package/dist/regex/http-date.js +6 -4
  308. package/dist/regex/index.d.ts +1 -0
  309. package/dist/regex/index.js +1 -0
  310. package/dist/regex/rfc-2822.d.ts +2 -0
  311. package/dist/regex/rfc-2822.js +2 -0
  312. package/dist/regex/rfc-3339.d.ts +3 -1
  313. package/dist/regex/rfc-3339.js +3 -1
  314. package/dist/regex/sql-date-time.d.ts +2 -1
  315. package/dist/regex/sql-date-time.js +2 -1
  316. package/dist/regex/time-zone-like.d.ts +3 -2
  317. package/dist/regex/time-zone-like.js +3 -2
  318. package/dist/regex/utc-offset.d.ts +2 -1
  319. package/dist/regex/utc-offset.js +2 -1
  320. package/dist/transport/calculate/crossingTime.d.ts +6 -1
  321. package/dist/transport/calculate/crossingTime.js +6 -1
  322. package/dist/transport/calculate/cutoffAt.d.ts +6 -1
  323. package/dist/transport/calculate/cutoffAt.js +2 -0
  324. package/dist/transport/calculate/cutoffSchedule.d.ts +6 -1
  325. package/dist/transport/calculate/cutoffSchedule.js +2 -0
  326. package/dist/transport/calculate/dwellTime.d.ts +6 -1
  327. package/dist/transport/calculate/dwellTime.js +6 -1
  328. package/dist/transport/calculate/scheduleDelivery.d.ts +13 -5
  329. package/dist/transport/calculate/scheduleDelivery.js +6 -1
  330. package/dist/transport/convert/etaAtZone.d.ts +6 -1
  331. package/dist/transport/convert/etaAtZone.js +6 -1
  332. package/dist/types/business-calendar.d.ts +5 -4
  333. package/dist/types/duty.d.ts +777 -0
  334. package/dist/types/duty.js +0 -0
  335. package/dist/types/edi.d.ts +407 -0
  336. package/dist/types/edi.js +0 -0
  337. package/dist/types/epcis.d.ts +25 -0
  338. package/dist/types/epcis.js +0 -0
  339. package/dist/types/exact-duration-unit.d.ts +8 -0
  340. package/dist/types/exact-duration-unit.js +0 -0
  341. package/dist/types/free-time-options.d.ts +4 -3
  342. package/dist/types/index.d.ts +5 -0
  343. package/dist/types/index.js +5 -0
  344. package/dist/types/operating-schedule.d.ts +3 -2
  345. package/dist/types/two-digit-year.d.ts +23 -0
  346. package/dist/types/two-digit-year.js +0 -0
  347. package/dist/types/zone-bucket-unit.d.ts +1 -1
  348. package/dist/unix/calculate/addUnix.d.ts +11 -2
  349. package/dist/unix/calculate/addUnix.js +14 -11
  350. package/dist/unix/calculate/diffUnix.d.ts +10 -2
  351. package/dist/unix/calculate/diffUnix.js +11 -6
  352. package/dist/unix/calculate/diffUnixAsDuration.d.ts +10 -2
  353. package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
  354. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
  355. package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
  356. package/dist/unix/calculate/endOfUnix.d.ts +11 -2
  357. package/dist/unix/calculate/endOfUnix.js +7 -0
  358. package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
  359. package/dist/unix/calculate/isBetweenUnix.js +3 -3
  360. package/dist/unix/calculate/roundUnix.d.ts +10 -2
  361. package/dist/unix/calculate/roundUnix.js +13 -6
  362. package/dist/unix/calculate/setUnix.d.ts +25 -5
  363. package/dist/unix/calculate/setUnix.js +33 -12
  364. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
  365. package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
  366. package/dist/unix/calculate/startOfUnix.d.ts +11 -2
  367. package/dist/unix/calculate/startOfUnix.js +7 -0
  368. package/dist/unix/calculate/subtractUnix.d.ts +10 -2
  369. package/dist/unix/calculate/subtractUnix.js +13 -11
  370. package/dist/unix/compare/areUnixEqualBy.d.ts +11 -2
  371. package/dist/unix/compare/areUnixEqualBy.js +7 -0
  372. package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
  373. package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
  374. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
  375. package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
  376. package/dist/unix/convert/convertUnixToPlainTime.d.ts +5 -2
  377. package/dist/unix/convert/convertUnixToPlainTime.js +5 -4
  378. package/dist/unix/convert/convertUnixToZoned.d.ts +5 -1
  379. package/dist/unix/convert/convertUnixToZoned.js +5 -1
  380. package/dist/unix/format/formatCalendarUnix.d.ts +6 -2
  381. package/dist/unix/format/formatCalendarUnix.js +6 -1
  382. package/dist/unix/format/formatRelativeUnix.d.ts +11 -3
  383. package/dist/unix/format/formatRelativeUnix.js +13 -5
  384. package/dist/unix/format/formatUnix.d.ts +7 -2
  385. package/dist/unix/format/formatUnix.js +4 -0
  386. package/dist/unix/get/getUnixDay.d.ts +1 -3
  387. package/dist/unix/get/getUnixDay.js +5 -12
  388. package/dist/unix/get/getUnixHour.d.ts +1 -3
  389. package/dist/unix/get/getUnixHour.js +5 -12
  390. package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
  391. package/dist/unix/get/getUnixMicrosecond.js +4 -11
  392. package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
  393. package/dist/unix/get/getUnixMillisecond.js +5 -12
  394. package/dist/unix/get/getUnixMinute.d.ts +1 -3
  395. package/dist/unix/get/getUnixMinute.js +5 -12
  396. package/dist/unix/get/getUnixMonth.d.ts +1 -3
  397. package/dist/unix/get/getUnixMonth.js +5 -12
  398. package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
  399. package/dist/unix/get/getUnixNanosecond.js +4 -11
  400. package/dist/unix/get/getUnixNowUnit.d.ts +2 -0
  401. package/dist/unix/get/getUnixNowUnit.js +2 -0
  402. package/dist/unix/get/getUnixSecond.d.ts +1 -3
  403. package/dist/unix/get/getUnixSecond.js +5 -12
  404. package/dist/unix/get/getUnixYear.d.ts +3 -3
  405. package/dist/unix/get/getUnixYear.js +5 -12
  406. package/dist/unix/interval/intervalCountUnix.d.ts +11 -2
  407. package/dist/unix/interval/intervalCountUnix.js +7 -0
  408. package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
  409. package/dist/unix/interval/intervalFromDurationUnix.js +12 -7
  410. package/dist/unix/interval/intervalLengthUnix.d.ts +10 -2
  411. package/dist/unix/interval/intervalLengthUnix.js +6 -0
  412. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
  413. package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
  414. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +10 -2
  415. package/dist/unix/interval/splitIntervalByUnitUnix.js +12 -6
  416. package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
  417. package/dist/unix/parse/parseDateFromUnix.js +3 -3
  418. package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
  419. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
  420. package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
  421. package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
  422. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
  423. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
  424. package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
  425. package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
  426. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
  427. package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
  428. package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
  429. package/dist/unix/parse/parseTimeFromUnix.js +4 -3
  430. package/dist/unix/parse/parseUnitFromUnix.d.ts +9 -3
  431. package/dist/unix/parse/parseUnitFromUnix.js +21 -14
  432. package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
  433. package/dist/unix/parse/parseWeekFromUnix.js +4 -4
  434. package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
  435. package/dist/unix/parse/parseYearFromUnix.js +4 -1
  436. package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
  437. package/dist/utc/calculate/addUtc.js +4 -7
  438. package/dist/utc/calculate/setUtc.d.ts +16 -3
  439. package/dist/utc/calculate/setUtc.js +22 -8
  440. package/dist/utc/calculate/subtractUtc.js +4 -7
  441. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -2
  442. package/dist/utc/convert/convertUtcToPlainDate.js +10 -7
  443. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +9 -2
  444. package/dist/utc/convert/convertUtcToPlainDateTime.js +12 -13
  445. package/dist/utc/convert/convertUtcToPlainTime.d.ts +5 -2
  446. package/dist/utc/convert/convertUtcToPlainTime.js +7 -6
  447. package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
  448. package/dist/utc/convert/convertUtcToZoned.js +5 -1
  449. package/dist/utc/format/formatCalendarUtc.d.ts +6 -2
  450. package/dist/utc/format/formatCalendarUtc.js +6 -1
  451. package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
  452. package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +7 -7
  453. package/dist/utc/format/formatRelativeUtc.d.ts +11 -3
  454. package/dist/utc/format/formatRelativeUtc.js +13 -5
  455. package/dist/utc/format/formatUtc.d.ts +7 -2
  456. package/dist/utc/format/formatUtc.js +4 -0
  457. package/dist/utc/format/index.d.ts +1 -1
  458. package/dist/utc/format/index.js +1 -1
  459. package/dist/utc/get/getUtcDay.d.ts +1 -3
  460. package/dist/utc/get/getUtcDay.js +5 -12
  461. package/dist/utc/get/getUtcHour.d.ts +1 -3
  462. package/dist/utc/get/getUtcHour.js +5 -12
  463. package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
  464. package/dist/utc/get/getUtcMicrosecond.js +4 -11
  465. package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
  466. package/dist/utc/get/getUtcMillisecond.js +5 -12
  467. package/dist/utc/get/getUtcMinute.d.ts +1 -3
  468. package/dist/utc/get/getUtcMinute.js +5 -12
  469. package/dist/utc/get/getUtcMonth.d.ts +1 -3
  470. package/dist/utc/get/getUtcMonth.js +5 -12
  471. package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
  472. package/dist/utc/get/getUtcNanosecond.js +4 -11
  473. package/dist/utc/get/getUtcNow.d.ts +1 -3
  474. package/dist/utc/get/getUtcNow.js +2 -9
  475. package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
  476. package/dist/utc/get/getUtcNowUnit.js +2 -0
  477. package/dist/utc/get/getUtcSecond.d.ts +1 -3
  478. package/dist/utc/get/getUtcSecond.js +5 -12
  479. package/dist/utc/get/getUtcYear.d.ts +3 -3
  480. package/dist/utc/get/getUtcYear.js +5 -12
  481. package/dist/utc/interval/intervalXorAllUtc.js +2 -2
  482. package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
  483. package/dist/utc/parse/index.d.ts +1 -1
  484. package/dist/utc/parse/index.js +1 -1
  485. package/dist/utc/parse/parseDateFromUtc.d.ts +4 -2
  486. package/dist/utc/parse/parseDateFromUtc.js +2 -2
  487. package/dist/utc/parse/parseDayFromUtc.d.ts +4 -2
  488. package/dist/utc/parse/parseDayFromUtc.js +2 -2
  489. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +4 -2
  490. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -4
  491. package/dist/utc/parse/parseHourFromUtc.d.ts +4 -2
  492. package/dist/utc/parse/parseHourFromUtc.js +2 -2
  493. package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
  494. package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +12 -12
  495. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +4 -2
  496. package/dist/utc/parse/parseMicrosecondFromUtc.js +2 -2
  497. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +4 -2
  498. package/dist/utc/parse/parseMillisecondFromUtc.js +2 -2
  499. package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
  500. package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
  501. package/dist/utc/parse/parseMonthFromUtc.d.ts +4 -2
  502. package/dist/utc/parse/parseMonthFromUtc.js +2 -2
  503. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +4 -2
  504. package/dist/utc/parse/parseNanosecondFromUtc.js +2 -2
  505. package/dist/utc/parse/parseSecondFromUtc.d.ts +4 -2
  506. package/dist/utc/parse/parseSecondFromUtc.js +2 -2
  507. package/dist/utc/parse/parseTimeFromUtc.d.ts +5 -2
  508. package/dist/utc/parse/parseTimeFromUtc.js +5 -4
  509. package/dist/utc/parse/parseUnitFromUtc.d.ts +10 -3
  510. package/dist/utc/parse/parseUnitFromUtc.js +11 -5
  511. package/dist/utc/parse/parseWeekFromUtc.d.ts +4 -2
  512. package/dist/utc/parse/parseWeekFromUtc.js +4 -4
  513. package/dist/utc/parse/parseYearFromUtc.d.ts +8 -4
  514. package/dist/utc/parse/parseYearFromUtc.js +8 -5
  515. package/dist/utc/validate/index.d.ts +2 -0
  516. package/dist/utc/validate/index.js +2 -0
  517. package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
  518. package/dist/utc/validate/isValidHttpDate.js +38 -0
  519. package/dist/utc/validate/isValidUtc.d.ts +4 -0
  520. package/dist/utc/validate/isValidUtc.js +4 -0
  521. package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
  522. package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
  523. package/dist/zoned/calculate/addZoned.js +4 -7
  524. package/dist/zoned/calculate/setZoned.d.ts +19 -5
  525. package/dist/zoned/calculate/setZoned.js +26 -9
  526. package/dist/zoned/calculate/subtractZoned.js +4 -7
  527. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +4 -1
  528. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +4 -1
  529. package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
  530. package/dist/zoned/convert/convertZonedToZoned.js +5 -1
  531. package/dist/zoned/format/formatCalendarZoned.js +2 -1
  532. package/dist/zoned/format/formatRelativeZoned.js +2 -1
  533. package/dist/zoned/format/formatTimeZoneName.d.ts +5 -1
  534. package/dist/zoned/format/formatTimeZoneName.js +5 -1
  535. package/dist/zoned/get/getDstTransitions.d.ts +5 -3
  536. package/dist/zoned/get/getDstTransitions.js +12 -7
  537. package/dist/zoned/get/getSystemTimeZone.d.ts +3 -1
  538. package/dist/zoned/get/getSystemTimeZone.js +5 -2
  539. package/dist/zoned/get/getTimeZoneOffset.d.ts +10 -2
  540. package/dist/zoned/get/getTimeZoneOffset.js +18 -5
  541. package/dist/zoned/get/getZonedDay.d.ts +2 -1
  542. package/dist/zoned/get/getZonedDay.js +6 -7
  543. package/dist/zoned/get/getZonedDayOfWeek.d.ts +2 -1
  544. package/dist/zoned/get/getZonedDayOfWeek.js +6 -5
  545. package/dist/zoned/get/getZonedHour.d.ts +2 -1
  546. package/dist/zoned/get/getZonedHour.js +6 -7
  547. package/dist/zoned/get/getZonedMicrosecond.d.ts +2 -1
  548. package/dist/zoned/get/getZonedMicrosecond.js +6 -5
  549. package/dist/zoned/get/getZonedMillisecond.d.ts +2 -1
  550. package/dist/zoned/get/getZonedMillisecond.js +6 -7
  551. package/dist/zoned/get/getZonedMinute.d.ts +2 -1
  552. package/dist/zoned/get/getZonedMinute.js +6 -7
  553. package/dist/zoned/get/getZonedMonth.d.ts +2 -1
  554. package/dist/zoned/get/getZonedMonth.js +6 -7
  555. package/dist/zoned/get/getZonedNanosecond.d.ts +2 -1
  556. package/dist/zoned/get/getZonedNanosecond.js +6 -5
  557. package/dist/zoned/get/getZonedNow.d.ts +5 -1
  558. package/dist/zoned/get/getZonedNow.js +5 -1
  559. package/dist/zoned/get/getZonedNowUnit.d.ts +6 -3
  560. package/dist/zoned/get/getZonedNowUnit.js +10 -7
  561. package/dist/zoned/get/getZonedSecond.d.ts +2 -1
  562. package/dist/zoned/get/getZonedSecond.js +6 -7
  563. package/dist/zoned/get/getZonedToday.d.ts +2 -1
  564. package/dist/zoned/get/getZonedToday.js +6 -5
  565. package/dist/zoned/get/getZonedWeekOfYear.d.ts +2 -1
  566. package/dist/zoned/get/getZonedWeekOfYear.js +6 -5
  567. package/dist/zoned/get/getZonedYear.d.ts +4 -1
  568. package/dist/zoned/get/getZonedYear.js +9 -7
  569. package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
  570. package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
  571. package/dist/zoned/parse/parseUnitFromZoned.d.ts +4 -1
  572. package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
  573. package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
  574. package/dist/zoned/parse/parseYearFromZoned.js +6 -3
  575. package/dist/zoned/validate/hasDaylightSaving.d.ts +4 -2
  576. package/dist/zoned/validate/hasDaylightSaving.js +13 -7
  577. package/dist/zoned/validate/index.d.ts +2 -0
  578. package/dist/zoned/validate/index.js +2 -0
  579. package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
  580. package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
  581. package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
  582. package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
  583. package/dist/zoned/validate/isValidTimeZone.d.ts +5 -1
  584. package/dist/zoned/validate/isValidTimeZone.js +6 -2
  585. package/package.json +50 -1
  586. package/skills/gmt-arithmetic/SKILL.md +99 -12
  587. package/skills/gmt-basics/SKILL.md +57 -15
  588. package/skills/gmt-integration/SKILL.md +24 -9
  589. package/skills/gmt-timezone/SKILL.md +134 -29
  590. package/dist/internal/unixZonedDateTime.d.ts +0 -22
  591. package/dist/internal/unixZonedDateTime.js +0 -32
  592. package/dist/internal/utcZonedDateTime.d.ts +0 -19
  593. package/dist/internal/utcZonedDateTime.js +0 -31
@@ -1,5 +1,4 @@
1
- import { subtractFromZoned, isValidAmount, resolveOverflow, } from "../../internal/index.js";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
1
+ import { frameInstant, frameZoned, normalizeZoneFrame, readDurationUnits, resolveOverflow, subtractFromZoned, } from "../../internal/index.js";
3
2
  import { resolveUnixEpochUnit, toUnixEpoch, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
3
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
5
4
  import { isOptionsArgument } from "../../internal/isObject.js";
@@ -10,6 +9,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
10
9
  * - Validates duration units and values.
11
10
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
12
11
  * - Returns null for invalid input.
12
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
13
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
14
+ * offset's seconds (under a minute) of the last instant Temporal supports
15
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
16
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
17
+ * such limit.
13
18
  *
14
19
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
20
  * @param units Partial<Record<DateTimeDurationUnit, number>> object specifying units to subtract
@@ -29,15 +34,12 @@ export function subtractUnix(value, units, options) {
29
34
  return null;
30
35
  }
31
36
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
32
- const timeZone = normalizeTimeZone(options?.timeZone);
37
+ const frame = normalizeZoneFrame(options?.timeZone);
33
38
  const overflow = resolveOverflow(options?.overflow);
34
- if (!timeZone || epochUnit === null)
39
+ if (frame === null || epochUnit === null)
35
40
  return null;
36
- const validUnits = typeof units === "object" &&
37
- units !== null &&
38
- Object.keys(units).every(isValidDateTimeDurationUnit);
39
- const validAmounts = validUnits && Object.values(units).every(isValidAmount);
40
- if (!validUnits || !validAmounts) {
41
+ const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
42
+ if (amounts === null) {
41
43
  return null;
42
44
  }
43
45
  const instant = unixEpochToInstant(value, epochUnit);
@@ -45,8 +47,8 @@ export function subtractUnix(value, units, options) {
45
47
  return null;
46
48
  }
47
49
  try {
48
- const zdt = instant.toZonedDateTimeISO(timeZone);
49
- return toUnixEpoch(subtractFromZoned(zdt, units, { overflow }), epochUnit);
50
+ const zdt = frameZoned(instant, frame);
51
+ return toUnixEpoch(frameInstant(subtractFromZoned(zdt, amounts, { overflow }), frame), epochUnit);
50
52
  }
51
53
  catch {
52
54
  return null;
@@ -17,6 +17,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
17
17
  * - `isSameDay(a, b)` → `areUnixEqualBy(a, b, "day")`
18
18
  * - `isSameMonth(a, b)` → `areUnixEqualBy(a, b, "month")`
19
19
  * - `isSameYear(a, b)` → `areUnixEqualBy(a, b, "year")`
20
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
21
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
22
+ * offset's seconds (under a minute) of the last instant Temporal supports
23
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
24
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `false`. There `false` is the sentinel,
25
+ * not a comparison. An offset to the minute has no such limit.
20
26
  *
21
27
  * @param value1 first Unix epoch: a safe integer or a digit string
22
28
  * @param value2 second Unix epoch, in the same unit
@@ -28,6 +34,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
28
34
  * @example areUnixEqualBy(1704067200000, 1735689600000, "year", { timeZone: "UTC" }) // false (2024-01-01 vs 2025-01-01)
29
35
  * @example areUnixEqualBy("1710498000000", 1710503000000, "days") // true (digit string, plural unit, UTC by default)
30
36
  * @example areUnixEqualBy(Number.NaN, 1710498000000, "day") // false
37
+ * @example areUnixEqualBy(2669999, 2670000, "day", { timeZone: "-00:44:30" }) // false (the local day turns at 00:44:30Z)
31
38
  */
32
39
  export declare function areUnixEqualBy(value1: number | string, value2: number | string, unit: Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>, options?: {
33
40
  /**
@@ -38,8 +45,10 @@ export declare function areUnixEqualBy(value1: number | string, value2: number |
38
45
  */
39
46
  epochUnit?: UnixUnit;
40
47
  /**
41
- * The time zone the unit boundaries are found in: an IANA name, a UTC offset, or `"local"` for
42
- * the system time zone. An unknown zone returns `false`.
48
+ * The time zone the unit boundaries are found in: an IANA name, a UTC offset (a time zone
49
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
50
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
51
+ * `false`.
43
52
  *
44
53
  * @defaultValue `"UTC"`
45
54
  */
@@ -17,6 +17,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
17
17
  * - `isSameDay(a, b)` → `areUnixEqualBy(a, b, "day")`
18
18
  * - `isSameMonth(a, b)` → `areUnixEqualBy(a, b, "month")`
19
19
  * - `isSameYear(a, b)` → `areUnixEqualBy(a, b, "year")`
20
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
21
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
22
+ * offset's seconds (under a minute) of the last instant Temporal supports
23
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
24
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `false`. There `false` is the sentinel,
25
+ * not a comparison. An offset to the minute has no such limit.
20
26
  *
21
27
  * @param value1 first Unix epoch: a safe integer or a digit string
22
28
  * @param value2 second Unix epoch, in the same unit
@@ -28,6 +34,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
28
34
  * @example areUnixEqualBy(1704067200000, 1735689600000, "year", { timeZone: "UTC" }) // false (2024-01-01 vs 2025-01-01)
29
35
  * @example areUnixEqualBy("1710498000000", 1710503000000, "days") // true (digit string, plural unit, UTC by default)
30
36
  * @example areUnixEqualBy(Number.NaN, 1710498000000, "day") // false
37
+ * @example areUnixEqualBy(2669999, 2670000, "day", { timeZone: "-00:44:30" }) // false (the local day turns at 00:44:30Z)
31
38
  */
32
39
  export function areUnixEqualBy(value1, value2, unit, options) {
33
40
  if (!isOptionsArgument(options)) {
@@ -18,6 +18,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
18
18
  * @example convertUnixToPlainDate("1709164800", { epochUnit: "second", timeZone: "Asia/Tokyo" }) // "2024-02-29"
19
19
  * @example convertUnixToPlainDate(1709164800000, { timeZone: "Asia/Tokio" }) // "" (unknown zone)
20
20
  * @example convertUnixToPlainDate(NaN) // ""
21
+ * @example convertUnixToPlainDate(1800000, { timeZone: "-00:44:30" }) // "1969-12-31" (a stored offset with seconds)
21
22
  */
22
23
  export declare function convertUnixToPlainDate(unix: number | string, options?: {
23
24
  /**
@@ -28,8 +29,10 @@ export declare function convertUnixToPlainDate(unix: number | string, options?:
28
29
  */
29
30
  epochUnit?: UnixUnit;
30
31
  /**
31
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
32
- * the system time zone. An unknown zone returns `""`.
32
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
33
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
34
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
35
+ * `""`.
33
36
  *
34
37
  * @defaultValue `"UTC"`
35
38
  */
@@ -1,5 +1,5 @@
1
1
  // fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
3
3
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
5
  /**
@@ -21,6 +21,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
21
21
  * @example convertUnixToPlainDate("1709164800", { epochUnit: "second", timeZone: "Asia/Tokyo" }) // "2024-02-29"
22
22
  * @example convertUnixToPlainDate(1709164800000, { timeZone: "Asia/Tokio" }) // "" (unknown zone)
23
23
  * @example convertUnixToPlainDate(NaN) // ""
24
+ * @example convertUnixToPlainDate(1800000, { timeZone: "-00:44:30" }) // "1969-12-31" (a stored offset with seconds)
24
25
  */
25
26
  export function convertUnixToPlainDate(unix, options) {
26
27
  try {
@@ -28,14 +29,14 @@ export function convertUnixToPlainDate(unix, options) {
28
29
  return "";
29
30
  }
30
31
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
31
- const timeZone = normalizeTimeZone(options?.timeZone);
32
- if (epochUnit === null || !timeZone)
32
+ const frame = normalizeZoneFrame(options?.timeZone);
33
+ if (epochUnit === null || frame === null)
33
34
  return "";
34
35
  const instant = unixEpochToInstant(unix, epochUnit);
35
36
  if (instant === null)
36
37
  return "";
37
38
  try {
38
- return instant.toZonedDateTimeISO(timeZone).toPlainDate().toString();
39
+ return frameWallClock(instant, frame).toPlainDate().toString();
39
40
  }
40
41
  catch {
41
42
  return "";
@@ -16,6 +16,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
16
16
  * @example convertUnixToPlainDateTime(-1, { timeZone: "UTC" }) // "1969-12-31T23:59:59.999"
17
17
  * @example convertUnixToPlainDateTime("1709164800000", { timeZone: "Asia/Tokyo" }) // "2024-02-29T09:00:00"
18
18
  * @example convertUnixToPlainDateTime(NaN) // ""
19
+ * @example convertUnixToPlainDateTime(45870000, { timeZone: "-00:44:30" }) // "1970-01-01T12:00:00" (a stored offset with seconds)
19
20
  */
20
21
  export declare function convertUnixToPlainDateTime(unix: number | string, options?: {
21
22
  /**
@@ -26,8 +27,10 @@ export declare function convertUnixToPlainDateTime(unix: number | string, option
26
27
  */
27
28
  epochUnit?: UnixUnit;
28
29
  /**
29
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
30
- * the system time zone. An unknown zone returns `""`.
30
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
31
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
32
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
33
+ * `""`.
31
34
  *
32
35
  * @defaultValue `"UTC"`
33
36
  */
@@ -1,5 +1,5 @@
1
1
  // fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
3
3
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
5
  /**
@@ -19,6 +19,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
19
19
  * @example convertUnixToPlainDateTime(-1, { timeZone: "UTC" }) // "1969-12-31T23:59:59.999"
20
20
  * @example convertUnixToPlainDateTime("1709164800000", { timeZone: "Asia/Tokyo" }) // "2024-02-29T09:00:00"
21
21
  * @example convertUnixToPlainDateTime(NaN) // ""
22
+ * @example convertUnixToPlainDateTime(45870000, { timeZone: "-00:44:30" }) // "1970-01-01T12:00:00" (a stored offset with seconds)
22
23
  */
23
24
  export function convertUnixToPlainDateTime(unix, options) {
24
25
  try {
@@ -26,14 +27,14 @@ export function convertUnixToPlainDateTime(unix, options) {
26
27
  return "";
27
28
  }
28
29
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
29
- const timeZone = normalizeTimeZone(options?.timeZone);
30
- if (epochUnit === null || !timeZone)
30
+ const frame = normalizeZoneFrame(options?.timeZone);
31
+ if (epochUnit === null || frame === null)
31
32
  return "";
32
33
  const instant = unixEpochToInstant(unix, epochUnit);
33
34
  if (instant === null)
34
35
  return "";
35
36
  try {
36
- return instant.toZonedDateTimeISO(timeZone).toPlainDateTime().toString();
37
+ return frameWallClock(instant, frame).toString();
37
38
  }
38
39
  catch {
39
40
  return "";
@@ -16,6 +16,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
16
16
  * @example convertUnixToPlainTime(-1, { timeZone: "UTC" }) // "23:59:59.999"
17
17
  * @example convertUnixToPlainTime("1706659200000", { timeZone: "local" }) // system-zone wall clock, e.g. "19:00:00" in America/New_York
18
18
  * @example convertUnixToPlainTime(NaN) // ""
19
+ * @example convertUnixToPlainTime(45870000, { timeZone: "-00:44:30" }) // "12:00:00" (a stored offset with seconds)
19
20
  */
20
21
  export declare function convertUnixToPlainTime(unix: number | string, options?: {
21
22
  /**
@@ -26,8 +27,10 @@ export declare function convertUnixToPlainTime(unix: number | string, options?:
26
27
  */
27
28
  epochUnit?: UnixUnit;
28
29
  /**
29
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
30
- * the system time zone. An unknown zone returns `""`.
30
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
31
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
32
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
33
+ * `""`.
31
34
  *
32
35
  * @defaultValue `"UTC"`
33
36
  */
@@ -1,5 +1,5 @@
1
1
  // fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
3
3
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
5
  /**
@@ -19,6 +19,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
19
19
  * @example convertUnixToPlainTime(-1, { timeZone: "UTC" }) // "23:59:59.999"
20
20
  * @example convertUnixToPlainTime("1706659200000", { timeZone: "local" }) // system-zone wall clock, e.g. "19:00:00" in America/New_York
21
21
  * @example convertUnixToPlainTime(NaN) // ""
22
+ * @example convertUnixToPlainTime(45870000, { timeZone: "-00:44:30" }) // "12:00:00" (a stored offset with seconds)
22
23
  */
23
24
  export function convertUnixToPlainTime(unix, options) {
24
25
  try {
@@ -26,14 +27,14 @@ export function convertUnixToPlainTime(unix, options) {
26
27
  return "";
27
28
  }
28
29
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
29
- const timeZone = normalizeTimeZone(options?.timeZone);
30
- if (epochUnit === null || !timeZone)
30
+ const frame = normalizeZoneFrame(options?.timeZone);
31
+ if (epochUnit === null || frame === null)
31
32
  return "";
32
33
  const instant = unixEpochToInstant(unix, epochUnit);
33
34
  if (instant === null)
34
35
  return "";
35
36
  try {
36
- return instant.toZonedDateTimeISO(timeZone).toPlainTime().toString();
37
+ return frameWallClock(instant, frame).toPlainTime().toString();
37
38
  }
38
39
  catch {
39
40
  return "";
@@ -7,9 +7,13 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
7
7
  * instant outside the Temporal range, returns "".
8
8
  * - An explicit `undefined` `options` is the same as omitted; a non-object `options` (such as a
9
9
  * bare `"seconds"` string) returns "".
10
+ * - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
11
+ * 9557 §4.1), so the result could not name it. Pass the IANA name, or call
12
+ * `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
13
+ * bracket.
10
14
  *
11
15
  * @param value epoch value: a safe integer or a digit string
12
- * @param timeZone IANA name or UTC offset
16
+ * @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
13
17
  * @param options optional: how `value` is read
14
18
  * @returns zoned ISO 8601 string or "" on invalid
15
19
  *
@@ -8,9 +8,13 @@ import { isValidTimeZone } from "../../zoned/validate/index.js";
8
8
  * instant outside the Temporal range, returns "".
9
9
  * - An explicit `undefined` `options` is the same as omitted; a non-object `options` (such as a
10
10
  * bare `"seconds"` string) returns "".
11
+ * - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
12
+ * 9557 §4.1), so the result could not name it. Pass the IANA name, or call
13
+ * `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
14
+ * bracket.
11
15
  *
12
16
  * @param value epoch value: a safe integer or a digit string
13
- * @param timeZone IANA name or UTC offset
17
+ * @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
14
18
  * @param options optional: how `value` is read
15
19
  * @returns zoned ISO 8601 string or "" on invalid
16
20
  *
@@ -24,8 +24,8 @@ export interface FormatCalendarUnixOptions {
24
24
  epochUnit?: UnixUnit;
25
25
  /**
26
26
  * The time zone used for both the calendar-day comparison and the rendered clock time: an IANA
27
- * name, a UTC offset, or `"local"` for the system time zone. An unknown zone returns `""`, as
28
- * ECMA-402 throws RangeError for it.
27
+ * name, a UTC offset to the minute (what `isValidTimeZone` accepts), or `"local"` for the system
28
+ * time zone. An unknown zone returns `""`, as ECMA-402 throws RangeError for it.
29
29
  *
30
30
  * @defaultValue `"UTC"`
31
31
  */
@@ -49,6 +49,10 @@ export interface FormatCalendarUnixOptions {
49
49
  * digits; anything else returns `""`.
50
50
  * - `options` must be an object or omitted: `null` returns `""`, as Temporal's GetOptionsObject
51
51
  * rejects it.
52
+ * - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
53
+ * identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
54
+ * `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
55
+ * Node, throw a RangeError exception"). Pass the IANA name.
52
56
  *
53
57
  * @param value unix epoch (string or number, per `epochUnit`) to format
54
58
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -3,6 +3,7 @@ import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
3
3
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
4
  import { resolveUnixFormatReference } from "../../internal/unixFormatReference.js";
5
5
  import { optionOrDefault } from "../../internal/optionOrDefault.js";
6
+ import { isObject } from "../../internal/isObject.js";
6
7
  /**
7
8
  * Format a unix epoch value as a relative day label plus time-of-day, e.g.
8
9
  * "Tomorrow at 2:30 PM" — the unix counterpart of `formatCalendar`. See
@@ -13,6 +14,10 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
13
14
  * digits; anything else returns `""`.
14
15
  * - `options` must be an object or omitted: `null` returns `""`, as Temporal's GetOptionsObject
15
16
  * rejects it.
17
+ * - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
18
+ * identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
19
+ * `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
20
+ * Node, throw a RangeError exception"). Pass the IANA name.
16
21
  *
17
22
  * @param value unix epoch (string or number, per `epochUnit`) to format
18
23
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -31,7 +36,7 @@ export function formatCalendarUnix(value, locale, options = {}) {
31
36
  try {
32
37
  // Temporal GetOptionsObject: undefined is defaults (the parameter default); anything else that is
33
38
  // not an object, including null, is a TypeError.
34
- if (options === null || typeof options !== "object")
39
+ if (!isObject(options))
35
40
  return "";
36
41
  const epochUnit = resolveUnixEpochUnit(options.epochUnit);
37
42
  if (epochUnit === null)
@@ -52,9 +52,10 @@ export interface FormatRelativeUnixOptions {
52
52
  */
53
53
  reference?: string | number;
54
54
  /**
55
- * The time zone that anchors a calendar unit (week, month or year): an IANA name, a UTC offset,
56
- * or `"local"` for the system time zone. An unknown zone returns `""` whatever the unit, as
57
- * ECMA-402 throws RangeError for it.
55
+ * The time zone that anchors a calendar unit (week, month or year): an IANA name, a UTC offset (a
56
+ * time zone identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
57
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
58
+ * `""` whatever the unit.
58
59
  *
59
60
  * @defaultValue `"UTC"`
60
61
  */
@@ -75,6 +76,12 @@ export interface FormatRelativeUnixOptions {
75
76
  * digits; `largestUnit` and `epochUnit` accept singular or plural names.
76
77
  * - `options` must be an object or omitted: `null` returns `""`, as Temporal's GetOptionsObject
77
78
  * rejects it.
79
+ * - **Limit at an offset with seconds.** A month or a year is measured from `reference`, placed in
80
+ * the offset's whole-minute zone and moved by its seconds, and the moved instant must be inside
81
+ * Temporal's range. So when one is measured and `reference` is within the offset's seconds (under
82
+ * a minute) of the last instant Temporal supports (`+275760-09-13T00:00:00Z`) for an offset east
83
+ * of UTC, or of the first (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset
84
+ * to the minute has no such limit.
78
85
  *
79
86
  * @param value unix epoch (string or number, per `epochUnit`) to format
80
87
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -89,5 +96,6 @@ export interface FormatRelativeUnixOptions {
89
96
  * @example formatRelativeUnix(0, "en-US", null as never) // ""
90
97
  * @example formatRelativeUnix("not-a-number") // ""
91
98
  * @example formatRelativeUnix(1709163000000, ["fr-FR", "en-US"], { reference: 1709164800000 }) // "il y a 30 minutes"
99
+ * @example formatRelativeUnix(218670000, "en-US", { reference: 45870000, timeZone: "-00:44:30" }) // "in 2 days" (a stored offset with seconds)
92
100
  */
93
101
  export declare function formatRelativeUnix(value: string | number, locale?: string | string[], options?: FormatRelativeUnixOptions): string;
@@ -1,9 +1,10 @@
1
1
  // fallow-ignore-file code-duplication -- cross-family Temporal type clone, by design (rule 5)
2
2
  import { formatRelativeDuration } from "../../internal/formatRelativeDuration.js";
3
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
3
+ import { frameZoned, normalizeZoneFrame } from "../../internal/zoneFrame.js";
4
4
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
5
5
  import { resolveUnixFormatReference } from "../../internal/unixFormatReference.js";
6
6
  import { durationTotal } from "../../internal/zonedWallClockDifference.js";
7
+ import { isObject } from "../../internal/isObject.js";
7
8
  /**
8
9
  * Format the relative time between a unix epoch value and a reference instant.
9
10
  *
@@ -19,6 +20,12 @@ import { durationTotal } from "../../internal/zonedWallClockDifference.js";
19
20
  * digits; `largestUnit` and `epochUnit` accept singular or plural names.
20
21
  * - `options` must be an object or omitted: `null` returns `""`, as Temporal's GetOptionsObject
21
22
  * rejects it.
23
+ * - **Limit at an offset with seconds.** A month or a year is measured from `reference`, placed in
24
+ * the offset's whole-minute zone and moved by its seconds, and the moved instant must be inside
25
+ * Temporal's range. So when one is measured and `reference` is within the offset's seconds (under
26
+ * a minute) of the last instant Temporal supports (`+275760-09-13T00:00:00Z`) for an offset east
27
+ * of UTC, or of the first (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset
28
+ * to the minute has no such limit.
22
29
  *
23
30
  * @param value unix epoch (string or number, per `epochUnit`) to format
24
31
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -33,18 +40,19 @@ import { durationTotal } from "../../internal/zonedWallClockDifference.js";
33
40
  * @example formatRelativeUnix(0, "en-US", null as never) // ""
34
41
  * @example formatRelativeUnix("not-a-number") // ""
35
42
  * @example formatRelativeUnix(1709163000000, ["fr-FR", "en-US"], { reference: 1709164800000 }) // "il y a 30 minutes"
43
+ * @example formatRelativeUnix(218670000, "en-US", { reference: 45870000, timeZone: "-00:44:30" }) // "in 2 days" (a stored offset with seconds)
36
44
  */
37
45
  export function formatRelativeUnix(value, locale, options = {}) {
38
46
  try {
39
47
  // Temporal GetOptionsObject: undefined is defaults (the parameter default); anything else that is
40
48
  // not an object, including null, is a TypeError.
41
- if (options === null || typeof options !== "object")
49
+ if (!isObject(options))
42
50
  return "";
43
51
  const epochUnit = resolveUnixEpochUnit(options.epochUnit);
44
52
  if (epochUnit === null)
45
53
  return "";
46
- const tz = normalizeTimeZone(options.timeZone);
47
- if (!tz)
54
+ const frame = normalizeZoneFrame(options.timeZone);
55
+ if (frame === null)
48
56
  return "";
49
57
  const target = unixEpochToInstant(value, epochUnit);
50
58
  if (target === null)
@@ -55,7 +63,7 @@ export function formatRelativeUnix(value, locale, options = {}) {
55
63
  try {
56
64
  const diff = target.since(reference);
57
65
  // month/year are calendrical and need a relativeTo anchor.
58
- return formatRelativeDuration(diff, locale, options, (unit) => durationTotal(diff, unit, reference.toZonedDateTimeISO(tz)));
66
+ return formatRelativeDuration(diff, locale, options, (unit) => durationTotal(diff, unit, frameZoned(reference, frame)));
59
67
  }
60
68
  catch {
61
69
  return "";
@@ -12,8 +12,9 @@ export interface FormatUnixOptions extends Intl.DateTimeFormatOptions {
12
12
  */
13
13
  epochUnit?: UnixUnit;
14
14
  /**
15
- * The time zone the value is rendered in: an IANA name, a UTC offset, or `"local"` for the system
16
- * time zone. An unknown zone returns `""`, as ECMA-402 throws RangeError for it.
15
+ * The time zone the value is rendered in: an IANA name, a UTC offset to the minute (what
16
+ * `isValidTimeZone` accepts), or `"local"` for the system time zone. An unknown zone returns
17
+ * `""`, as ECMA-402 throws RangeError for it.
17
18
  *
18
19
  * @defaultValue `"UTC"`
19
20
  */
@@ -41,6 +42,10 @@ export interface FormatUnixOptions extends Intl.DateTimeFormatOptions {
41
42
  * the `dateStyle` width, `era` alone dropped the time, and `timeZoneName` alone without
42
43
  * `includeTimeZoneName` returned `""`. Pass the fields the old text showed to keep it.
43
44
  * - `options` null returns `""`, as ECMA-402's CoerceOptionsToObject rejects it.
45
+ * - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
46
+ * identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
47
+ * `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
48
+ * Node, throw a RangeError exception"). Pass the IANA name.
44
49
  *
45
50
  * @param value unix epoch value to format (string or number, per `epochUnit`)
46
51
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -20,6 +20,10 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
20
20
  * the `dateStyle` width, `era` alone dropped the time, and `timeZoneName` alone without
21
21
  * `includeTimeZoneName` returned `""`. Pass the fields the old text showed to keep it.
22
22
  * - `options` null returns `""`, as ECMA-402's CoerceOptionsToObject rejects it.
23
+ * - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
24
+ * identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
25
+ * `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
26
+ * Node, throw a RangeError exception"). Pass the IANA name.
23
27
  *
24
28
  * @param value unix epoch value to format (string or number, per `epochUnit`)
25
29
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
@@ -3,11 +3,9 @@
3
3
  *
4
4
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
5
5
  * - Returns zero-padded string to 2 digits.
6
- * - Returns "" on failure.
7
6
  *
8
- * @returns current day string (zero-padded to 2 digits) or "" on failure
7
+ * @returns current day string (zero-padded to 2 digits)
9
8
  *
10
9
  * @example getUnixDay() // "29"
11
- * @example getUnixDay() // "" (on failure)
12
10
  */
13
11
  export declare function getUnixDay(): string;
@@ -4,21 +4,14 @@ import { Temporal } from "@js-temporal/polyfill";
4
4
  *
5
5
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
6
6
  * - Returns zero-padded string to 2 digits.
7
- * - Returns "" on failure.
8
7
  *
9
- * @returns current day string (zero-padded to 2 digits) or "" on failure
8
+ * @returns current day string (zero-padded to 2 digits)
10
9
  *
11
10
  * @example getUnixDay() // "29"
12
- * @example getUnixDay() // "" (on failure)
13
11
  */
14
12
  export function getUnixDay() {
15
- try {
16
- return Temporal.Now.instant()
17
- .toZonedDateTimeISO("UTC")
18
- .day.toString()
19
- .padStart(2, "0");
20
- }
21
- catch {
22
- return "";
23
- }
13
+ return Temporal.Now.instant()
14
+ .toZonedDateTimeISO("UTC")
15
+ .day.toString()
16
+ .padStart(2, "0");
24
17
  }
@@ -3,11 +3,9 @@
3
3
  *
4
4
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
5
5
  * - Returns zero-padded string to 2 digits.
6
- * - Returns "" on failure.
7
6
  *
8
- * @returns current hour string (zero-padded to 2 digits) or "" on failure
7
+ * @returns current hour string (zero-padded to 2 digits)
9
8
  *
10
9
  * @example getUnixHour() // "00"
11
- * @example getUnixHour() // "" (on failure)
12
10
  */
13
11
  export declare function getUnixHour(): string;
@@ -4,21 +4,14 @@ import { Temporal } from "@js-temporal/polyfill";
4
4
  *
5
5
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
6
6
  * - Returns zero-padded string to 2 digits.
7
- * - Returns "" on failure.
8
7
  *
9
- * @returns current hour string (zero-padded to 2 digits) or "" on failure
8
+ * @returns current hour string (zero-padded to 2 digits)
10
9
  *
11
10
  * @example getUnixHour() // "00"
12
- * @example getUnixHour() // "" (on failure)
13
11
  */
14
12
  export function getUnixHour() {
15
- try {
16
- return Temporal.Now.instant()
17
- .toZonedDateTimeISO("UTC")
18
- .hour.toString()
19
- .padStart(2, "0");
20
- }
21
- catch {
22
- return "";
23
- }
13
+ return Temporal.Now.instant()
14
+ .toZonedDateTimeISO("UTC")
15
+ .hour.toString()
16
+ .padStart(2, "0");
24
17
  }
@@ -3,11 +3,9 @@
3
3
  *
4
4
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
5
5
  * - Returns zero-padded string to 3 digits.
6
- * - Returns "" on failure.
7
6
  *
8
- * @returns current microsecond string (zero-padded to 3 digits) or "" on failure
7
+ * @returns current microsecond string (zero-padded to 3 digits)
9
8
  *
10
9
  * @example getUnixMicrosecond() // "456"
11
- * @example getUnixMicrosecond() // "" (on failure)
12
10
  */
13
11
  export declare function getUnixMicrosecond(): string;
@@ -4,20 +4,13 @@ import { Temporal } from "@js-temporal/polyfill";
4
4
  *
5
5
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
6
6
  * - Returns zero-padded string to 3 digits.
7
- * - Returns "" on failure.
8
7
  *
9
- * @returns current microsecond string (zero-padded to 3 digits) or "" on failure
8
+ * @returns current microsecond string (zero-padded to 3 digits)
10
9
  *
11
10
  * @example getUnixMicrosecond() // "456"
12
- * @example getUnixMicrosecond() // "" (on failure)
13
11
  */
14
12
  export function getUnixMicrosecond() {
15
- try {
16
- return (Temporal.Now.instant().toZonedDateTimeISO("UTC").microsecond ?? 0)
17
- .toString()
18
- .padStart(3, "0");
19
- }
20
- catch {
21
- return "";
22
- }
13
+ return (Temporal.Now.instant().toZonedDateTimeISO("UTC").microsecond ?? 0)
14
+ .toString()
15
+ .padStart(3, "0");
23
16
  }
@@ -3,11 +3,9 @@
3
3
  *
4
4
  * - Uses Temporal.Now.instant() converted to UTC zoned date time.
5
5
  * - Returns zero-padded string to 3 digits.
6
- * - Returns "" on failure.
7
6
  *
8
- * @returns current millisecond string (zero-padded to 3 digits) or "" on failure
7
+ * @returns current millisecond string (zero-padded to 3 digits)
9
8
  *
10
9
  * @example getUnixMillisecond() // "123"
11
- * @example getUnixMillisecond() // "" (on failure)
12
10
  */
13
11
  export declare function getUnixMillisecond(): string;