@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,22 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current microsecond for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current microsecond string (zero-padded to 3 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedMicrosecond("America/New_York") // "000"
13
13
  * @example getZonedMicrosecond("invalid") // ""
14
14
  */
15
15
  export function getZonedMicrosecond(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return (Temporal.Now.zonedDateTimeISO(ianaTimezone).microsecond ?? 0)
20
+ return (frameNowWallClock(frame).microsecond ?? 0)
20
21
  .toString()
21
22
  .padStart(3, "0");
22
23
  }
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns current millisecond string (zero-padded to 3 digits) or "" on invalid input
9
10
  *
10
11
  * @example getZonedMillisecond("America/New_York") // "000"
@@ -1,24 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current millisecond for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current millisecond string (zero-padded to 3 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedMillisecond("America/New_York") // "000"
13
13
  * @example getZonedMillisecond("invalid") // ""
14
14
  */
15
15
  export function getZonedMillisecond(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return Temporal.Now.zonedDateTimeISO(ianaTimezone)
20
- .millisecond.toString()
21
- .padStart(3, "0");
20
+ return frameNowWallClock(frame).millisecond.toString().padStart(3, "0");
22
21
  }
23
22
  catch {
24
23
  return "";
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns current minute string (zero-padded to 2 digits) or "" on invalid input
9
10
  *
10
11
  * @example getZonedMinute("America/New_York") // "00"
@@ -1,24 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current minute for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current minute string (zero-padded to 2 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedMinute("America/New_York") // "00"
13
13
  * @example getZonedMinute("invalid") // ""
14
14
  */
15
15
  export function getZonedMinute(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return Temporal.Now.zonedDateTimeISO(ianaTimezone)
20
- .minute.toString()
21
- .padStart(2, "0");
20
+ return frameNowWallClock(frame).minute.toString().padStart(2, "0");
22
21
  }
23
22
  catch {
24
23
  return "";
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns current month string (zero-padded to 2 digits) or "" on invalid input
9
10
  *
10
11
  * @example getZonedMonth("America/New_York") // "02"
@@ -1,24 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current month for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current month string (zero-padded to 2 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedMonth("America/New_York") // "02"
13
13
  * @example getZonedMonth("invalid") // ""
14
14
  */
15
15
  export function getZonedMonth(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return Temporal.Now.zonedDateTimeISO(ianaTimezone)
20
- .month.toString()
21
- .padStart(2, "0");
20
+ return frameNowWallClock(frame).month.toString().padStart(2, "0");
22
21
  }
23
22
  catch {
24
23
  return "";
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns current nanosecond string (zero-padded to 3 digits) or "" on invalid input
9
10
  *
10
11
  * @example getZonedNanosecond("America/New_York") // "000"
@@ -1,22 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current nanosecond for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current nanosecond string (zero-padded to 3 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedNanosecond("America/New_York") // "000"
13
13
  * @example getZonedNanosecond("invalid") // ""
14
14
  */
15
15
  export function getZonedNanosecond(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return (Temporal.Now.zonedDateTimeISO(ianaTimezone).nanosecond ?? 0)
20
+ return (frameNowWallClock(frame).nanosecond ?? 0)
20
21
  .toString()
21
22
  .padStart(3, "0");
22
23
  }
@@ -7,8 +7,12 @@ import { Temporal } from "@js-temporal/polyfill";
7
7
  * - `smallestUnit` is the only option read. Any other key on `optionsArg` is ignored, so the
8
8
  * string always carries the offset and the bracketed time zone, and smaller units are always
9
9
  * truncated.
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
- * @param ianaTimezone IANA timeZone identifier
15
+ * @param ianaTimezone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
12
16
  * @param optionsArg optional setting for the precision of the output string
13
17
  * @returns zoned ISO 8601 datetime string or "" on invalid input
14
18
  *
@@ -10,8 +10,12 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
10
10
  * - `smallestUnit` is the only option read. Any other key on `optionsArg` is ignored, so the
11
11
  * string always carries the offset and the bracketed time zone, and smaller units are always
12
12
  * truncated.
13
+ * - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
14
+ * 9557 §4.1), so the result could not name it. Pass the IANA name, or call
15
+ * `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
16
+ * bracket.
13
17
  *
14
- * @param ianaTimezone IANA timeZone identifier
18
+ * @param ianaTimezone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
15
19
  * @param optionsArg optional setting for the precision of the output string
16
20
  * @returns zoned ISO 8601 datetime string or "" on invalid input
17
21
  *
@@ -1,4 +1,4 @@
1
- import { Temporal } from "@js-temporal/polyfill";
1
+ import type { Temporal } from "@js-temporal/polyfill";
2
2
  /**
3
3
  * Units extractable from the current time in a specific IANA timeZone, as
4
4
  * consumed by `getZonedNowUnit`.
@@ -7,7 +7,7 @@ import { Temporal } from "@js-temporal/polyfill";
7
7
  *
8
8
  * | Member | Description |
9
9
  * | --- | --- |
10
- * | `year` | Full calendar year (e.g. `2024`), no padding. |
10
+ * | `year` | Four digits (e.g. `2024`, `0005`); a sign and six digits outside 0000–9999 (e.g. `+010000`). |
11
11
  * | `month` | 1–12, zero-padded to 2 digits (e.g. `02`). |
12
12
  * | `week` | Week-of-year from `parseWeekFromDate`, 1–53. |
13
13
  * | `day` | Day of month 1–31, zero-padded (e.g. `15`). |
@@ -32,8 +32,11 @@ export type ZonedNowUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "da
32
32
  * - Validation is performed on timezone and unit.
33
33
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
34
34
  * does; `"dayOfWeek"` has no plural.
35
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
36
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
35
37
  *
36
- * @param ianaTimezone IANA timeZone identifier
38
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
39
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
37
40
  * @param unit unit to extract from current zoned time
38
41
  * @returns string representation of the requested unit or "" on invalid input
39
42
  *
@@ -1,7 +1,6 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
1
  import { zonedNowUnitValue } from "../../internal/zonedNowUnitValue.js";
3
2
  import { parseWeekFromDate } from "../../plain/parse/index.js";
4
- import { isValidTimeZone } from "../validate/index.js";
3
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
5
4
  import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
6
5
  function isValidZonedNowUnit(unit) {
7
6
  return [
@@ -26,8 +25,11 @@ function isValidZonedNowUnit(unit) {
26
25
  * - Validation is performed on timezone and unit.
27
26
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
28
27
  * does; `"dayOfWeek"` has no plural.
28
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
29
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
29
30
  *
30
- * @param ianaTimezone IANA timeZone identifier
31
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
32
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
31
33
  * @param unit unit to extract from current zoned time
32
34
  * @returns string representation of the requested unit or "" on invalid input
33
35
  *
@@ -40,13 +42,14 @@ export function getZonedNowUnit(ianaTimezone, unit) {
40
42
  return "";
41
43
  }
42
44
  const resolvedUnit = resolveDateTimeUnit(unit);
43
- if (!isValidTimeZone(ianaTimezone) || !isValidZonedNowUnit(resolvedUnit)) {
45
+ const frame = zoneFrame(ianaTimezone);
46
+ if (frame === null || !isValidZonedNowUnit(resolvedUnit)) {
44
47
  return "";
45
48
  }
46
49
  try {
47
- const now = Temporal.Now.zonedDateTimeISO(ianaTimezone);
48
- return zonedNowUnitValue(now, resolvedUnit, (zdt) => {
49
- const w = parseWeekFromDate(zdt.toPlainDate().toString());
50
+ const now = frameNowWallClock(frame);
51
+ return zonedNowUnitValue(now, resolvedUnit, (wallClock) => {
52
+ const w = parseWeekFromDate(wallClock.toPlainDate().toString());
50
53
  return w === null ? "" : w.toString();
51
54
  });
52
55
  }
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns current second string (zero-padded to 2 digits) or "" on invalid input
9
10
  *
10
11
  * @example getZonedSecond("America/New_York") // "00"
@@ -1,24 +1,23 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current second for the specified IANA timeZone.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
6
  * - Validation is performed on the timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns current second string (zero-padded to 2 digits) or "" on invalid input
11
11
  *
12
12
  * @example getZonedSecond("America/New_York") // "00"
13
13
  * @example getZonedSecond("invalid") // ""
14
14
  */
15
15
  export function getZonedSecond(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null)
17
18
  return "";
18
19
  try {
19
- return Temporal.Now.zonedDateTimeISO(ianaTimezone)
20
- .second.toString()
21
- .padStart(2, "0");
20
+ return frameNowWallClock(frame).second.toString().padStart(2, "0");
22
21
  }
23
22
  catch {
24
23
  return "";
@@ -4,7 +4,8 @@
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get current date in timezone.
5
5
  * - Returns "" for invalid timezone.
6
6
  *
7
- * @param ianaTimezone IANA timeZone identifier
7
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
8
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
9
  * @returns ISO date string (YYYY-MM-DD) or "" when invalid
9
10
  *
10
11
  * @example getZonedToday("America/New_York") // "2024-02-29"
@@ -1,23 +1,24 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return today's date in the given IANA timeZone as an ISO date string.
5
4
  *
6
5
  * - Uses Temporal.Now.zonedDateTimeISO to get current date in timezone.
7
6
  * - Returns "" for invalid timezone.
8
7
  *
9
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
10
  * @returns ISO date string (YYYY-MM-DD) or "" when invalid
11
11
  *
12
12
  * @example getZonedToday("America/New_York") // "2024-02-29"
13
13
  * @example getZonedToday("invalid") // ""
14
14
  */
15
15
  export function getZonedToday(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone)) {
16
+ const frame = zoneFrame(ianaTimezone);
17
+ if (frame === null) {
17
18
  return "";
18
19
  }
19
20
  try {
20
- const today = Temporal.Now.zonedDateTimeISO(ianaTimezone).toPlainDate();
21
+ const today = frameNowWallClock(frame).toPlainDate();
21
22
  return today.toString();
22
23
  }
23
24
  catch {
@@ -5,7 +5,8 @@
5
5
  * - Uses Temporal.PlainDate.weekOfYear for ISO week number.
6
6
  * - Validation is performed on the timezone.
7
7
  *
8
- * @param ianaTimezone IANA timeZone identifier
8
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
9
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
9
10
  * @returns current week number (1-53) or null on invalid input
10
11
  *
11
12
  * @example getZonedWeekOfYear("America/New_York") // 9
@@ -1,5 +1,4 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
3
2
  /**
4
3
  * Return the current week of year for the specified IANA timeZone.
5
4
  *
@@ -7,17 +6,19 @@ import { isValidTimeZone } from "../validate/index.js";
7
6
  * - Uses Temporal.PlainDate.weekOfYear for ISO week number.
8
7
  * - Validation is performed on the timezone.
9
8
  *
10
- * @param ianaTimezone IANA timeZone identifier
9
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
10
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
11
11
  * @returns current week number (1-53) or null on invalid input
12
12
  *
13
13
  * @example getZonedWeekOfYear("America/New_York") // 9
14
14
  * @example getZonedWeekOfYear("invalid") // null
15
15
  */
16
16
  export function getZonedWeekOfYear(ianaTimezone) {
17
- if (!isValidTimeZone(ianaTimezone))
17
+ const frame = zoneFrame(ianaTimezone);
18
+ if (frame === null)
18
19
  return null;
19
20
  try {
20
- const now = Temporal.Now.zonedDateTimeISO(ianaTimezone);
21
+ const now = frameNowWallClock(frame);
21
22
  return now.toPlainDate().weekOfYear ?? null;
22
23
  }
23
24
  catch {
@@ -3,8 +3,11 @@
3
3
  *
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
5
5
  * - Validation is performed on the timezone.
6
+ * - The year is zero-padded to 4 digits. A year outside 0000–9999 is written with a sign and six
7
+ * digits (`+010000`, `-000005`), as Temporal writes it at the head of a date.
6
8
  *
7
- * @param ianaTimezone IANA timeZone identifier
9
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
10
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
8
11
  * @returns current year string (zero-padded to 4 digits) or "" on invalid input
9
12
  *
10
13
  * @example getZonedYear("America/New_York") // "2024"
@@ -1,24 +1,26 @@
1
- import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../validate/index.js";
1
+ import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
2
+ import { isoYearString } from "../../internal/isoYearString.js";
3
3
  /**
4
4
  * Return the current year for the specified IANA timeZone.
5
5
  *
6
6
  * - Uses Temporal.Now.zonedDateTimeISO to get the current time.
7
7
  * - Validation is performed on the timezone.
8
+ * - The year is zero-padded to 4 digits. A year outside 0000–9999 is written with a sign and six
9
+ * digits (`+010000`, `-000005`), as Temporal writes it at the head of a date.
8
10
  *
9
- * @param ianaTimezone IANA timeZone identifier
11
+ * @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
12
+ * a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
10
13
  * @returns current year string (zero-padded to 4 digits) or "" on invalid input
11
14
  *
12
15
  * @example getZonedYear("America/New_York") // "2024"
13
16
  * @example getZonedYear("invalid") // ""
14
17
  */
15
18
  export function getZonedYear(ianaTimezone) {
16
- if (!isValidTimeZone(ianaTimezone))
19
+ const frame = zoneFrame(ianaTimezone);
20
+ if (frame === null)
17
21
  return "";
18
22
  try {
19
- return Temporal.Now.zonedDateTimeISO(ianaTimezone)
20
- .year.toString()
21
- .padStart(4, "0");
23
+ return isoYearString(frameNowWallClock(frame).year);
22
24
  }
23
25
  catch {
24
26
  return "";
@@ -2,6 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { calendarOfAllZonedValues, formatZonedInCalendar, halfOpenXor, parseCalendarZonedValue, } from "../../internal/index.js";
4
4
  import { isValidCalendarZonedInterval } from "./validate/index.js";
5
+ import { isObject } from "../../internal/isObject.js";
5
6
  /**
6
7
  * Return the symmetric difference across a list of zoned intervals — the set of instants
7
8
  * covered by an odd number of the input intervals.
@@ -39,8 +40,7 @@ export function intervalXorAllZoned(intervals) {
39
40
  if (!Array.isArray(intervals) || intervals.length === 0) {
40
41
  return [];
41
42
  }
42
- if (!intervals.every((interval) => interval &&
43
- typeof interval === "object" &&
43
+ if (!intervals.every((interval) => isObject(interval) &&
44
44
  typeof interval.start === "string" &&
45
45
  typeof interval.end === "string" &&
46
46
  isValidCalendarZonedInterval(interval.start, interval.end))) {
@@ -2,6 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { calendarOfAllZonedValues, formatZonedInCalendar, halfOpenMerge, parseCalendarZonedValue, } from "../../internal/index.js";
4
4
  import { isValidCalendarZonedInterval } from "./validate/index.js";
5
+ import { isObject } from "../../internal/isObject.js";
5
6
  /**
6
7
  * Collapse a list of zoned intervals into the minimum set of non-overlapping intervals.
7
8
  *
@@ -43,8 +44,7 @@ export function mergeIntervalsZoned(intervals) {
43
44
  if (!Array.isArray(intervals) || intervals.length === 0) {
44
45
  return [];
45
46
  }
46
- if (!intervals.every((interval) => interval &&
47
- typeof interval === "object" &&
47
+ if (!intervals.every((interval) => isObject(interval) &&
48
48
  typeof interval.start === "string" &&
49
49
  typeof interval.end === "string" &&
50
50
  isValidCalendarZonedInterval(interval.start, interval.end))) {
@@ -8,7 +8,7 @@ import type { Temporal } from "@js-temporal/polyfill";
8
8
  *
9
9
  * | Member | Description |
10
10
  * | --- | --- |
11
- * | `year` | Full year, no padding (e.g. `2024`). |
11
+ * | `year` | Four digits (e.g. `2024`, `0005`); a sign and six digits outside 0000–9999 (e.g. `+010000`). |
12
12
  * | `month` | Zero-padded 2 (e.g. `03`). |
13
13
  * | `week` | Week-of-year, 1–53 (`weekStartsOn`-controlled). |
14
14
  * | `day` | Zero-padded 2. |
@@ -34,6 +34,8 @@ export type ZonedParseUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "
34
34
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
35
35
  * does; `"dayOfWeek"` has no plural.
36
36
  * - Returns "" for invalid input.
37
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
38
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
37
39
  *
38
40
  * @param value zoned ISO 8601 datetime string
39
41
  * @param unit unit to extract
@@ -41,6 +43,7 @@ export type ZonedParseUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "
41
43
  * @returns string representation of the requested unit or "" when invalid
42
44
  *
43
45
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "year") // "2024"
46
+ * @example parseUnitFromZoned("0005-06-01T12:30:00+00:00[UTC]", "year") // "0005"
44
47
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "milliseconds") // "789"
45
48
  * @example parseUnitFromZoned("2024-12-31T12:00:00+00:00[UTC]", "week", { weekStartsOn: "sunday" }) // "1"
46
49
  * @example parseUnitFromZoned("invalid", "year") // ""
@@ -4,6 +4,7 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
4
4
  import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
5
5
  import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
6
6
  import { isOptionsArgument } from "../../internal/isObject.js";
7
+ import { isoYearString } from "../../internal/isoYearString.js";
7
8
  function isValidZonedUnit(unit) {
8
9
  return [
9
10
  "year",
@@ -28,6 +29,8 @@ function isValidZonedUnit(unit) {
28
29
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
29
30
  * does; `"dayOfWeek"` has no plural.
30
31
  * - Returns "" for invalid input.
32
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
33
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
31
34
  *
32
35
  * @param value zoned ISO 8601 datetime string
33
36
  * @param unit unit to extract
@@ -35,6 +38,7 @@ function isValidZonedUnit(unit) {
35
38
  * @returns string representation of the requested unit or "" when invalid
36
39
  *
37
40
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "year") // "2024"
41
+ * @example parseUnitFromZoned("0005-06-01T12:30:00+00:00[UTC]", "year") // "0005"
38
42
  * @example parseUnitFromZoned("2024-02-29T12:34:56.789+00:00[UTC]", "milliseconds") // "789"
39
43
  * @example parseUnitFromZoned("2024-12-31T12:00:00+00:00[UTC]", "week", { weekStartsOn: "sunday" }) // "1"
40
44
  * @example parseUnitFromZoned("invalid", "year") // ""
@@ -56,7 +60,7 @@ export function parseUnitFromZoned(value, unit, optionsArg) {
56
60
  const zonedDateTime = zonedDateTimeFrom(value);
57
61
  switch (resolvedUnit) {
58
62
  case "year":
59
- return zonedDateTime.year.toString();
63
+ return isoYearString(zonedDateTime.year);
60
64
  case "month":
61
65
  return zonedDateTime.month.toString().padStart(2, "0");
62
66
  case "week":
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * Return the year for a given ISO 8601 zoned datetime string.
3
3
  *
4
- * - Returns string for year.
4
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
5
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
5
6
  * - Returns "" for invalid input.
6
7
  *
7
8
  * @param value ISO zoned datetime string
8
- * @returns Year as string or "" on invalid input
9
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
9
10
  *
10
11
  * @example parseYearFromZoned("2024-03-15T14:30:45.123+00:00[UTC]") // "2024"
12
+ * @example parseYearFromZoned("0005-06-01T12:30:00+00:00[UTC]") // "0005"
11
13
  * @example parseYearFromZoned("invalid") // ""
12
14
  */
13
15
  export declare function parseYearFromZoned(value: string): string;
@@ -1,15 +1,18 @@
1
1
  import { isValidZonedDateTime } from "../validate/index.js";
2
2
  import { zonedDateTimeFrom } from "../../internal/index.js";
3
+ import { isoYearString } from "../../internal/isoYearString.js";
3
4
  /**
4
5
  * Return the year for a given ISO 8601 zoned datetime string.
5
6
  *
6
- * - Returns string for year.
7
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
8
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
7
9
  * - Returns "" for invalid input.
8
10
  *
9
11
  * @param value ISO zoned datetime string
10
- * @returns Year as string or "" on invalid input
12
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
11
13
  *
12
14
  * @example parseYearFromZoned("2024-03-15T14:30:45.123+00:00[UTC]") // "2024"
15
+ * @example parseYearFromZoned("0005-06-01T12:30:00+00:00[UTC]") // "0005"
13
16
  * @example parseYearFromZoned("invalid") // ""
14
17
  */
15
18
  export function parseYearFromZoned(value) {
@@ -18,7 +21,7 @@ export function parseYearFromZoned(value) {
18
21
  }
19
22
  try {
20
23
  const zonedDateTime = zonedDateTimeFrom(value);
21
- return zonedDateTime.year.toString();
24
+ return isoYearString(zonedDateTime.year);
22
25
  }
23
26
  catch {
24
27
  return "";