@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
@@ -14,8 +14,10 @@
14
14
  */
15
15
  export declare function parseMinuteFromUtc(value: string, options?: {
16
16
  /**
17
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
18
- * the system time zone. An unknown zone returns `""`.
17
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
18
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
19
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
20
+ * `""`.
19
21
  *
20
22
  * @defaultValue `"UTC"`
21
23
  */
@@ -1,4 +1,4 @@
1
- import { utcZonedDateTime } from "../../internal/utcZonedDateTime.js";
1
+ import { utcWallClock } from "../../internal/utcWallClock.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
3
  /**
4
4
  * Return the minute (0-59) from a UTC datetime string.
@@ -19,7 +19,7 @@ export function parseMinuteFromUtc(value, options) {
19
19
  if (!isOptionsArgument(options)) {
20
20
  return "";
21
21
  }
22
- const dateTime = utcZonedDateTime(value, options);
22
+ const dateTime = utcWallClock(value, options);
23
23
  return dateTime === null ? "" : dateTime.minute.toString().padStart(2, "0");
24
24
  }
25
25
  catch {
@@ -14,8 +14,10 @@
14
14
  */
15
15
  export declare function parseMonthFromUtc(value: string, options?: {
16
16
  /**
17
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
18
- * the system time zone. An unknown zone returns `""`.
17
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
18
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
19
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
20
+ * `""`.
19
21
  *
20
22
  * @defaultValue `"UTC"`
21
23
  */
@@ -1,4 +1,4 @@
1
- import { utcZonedDateTime } from "../../internal/utcZonedDateTime.js";
1
+ import { utcWallClock } from "../../internal/utcWallClock.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
3
  /**
4
4
  * Return the month (1-12) from a UTC datetime string.
@@ -19,7 +19,7 @@ export function parseMonthFromUtc(value, options) {
19
19
  if (!isOptionsArgument(options)) {
20
20
  return "";
21
21
  }
22
- const dateTime = utcZonedDateTime(value, options);
22
+ const dateTime = utcWallClock(value, options);
23
23
  return dateTime === null ? "" : dateTime.month.toString().padStart(2, "0");
24
24
  }
25
25
  catch {
@@ -15,8 +15,10 @@
15
15
  */
16
16
  export declare function parseNanosecondFromUtc(value: string, options?: {
17
17
  /**
18
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
19
- * the system time zone. An unknown zone returns `""`.
18
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
19
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
20
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
21
+ * `""`.
20
22
  *
21
23
  * @defaultValue `"UTC"`
22
24
  */
@@ -1,4 +1,4 @@
1
- import { utcZonedDateTime } from "../../internal/utcZonedDateTime.js";
1
+ import { utcWallClock } from "../../internal/utcWallClock.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
3
  /**
4
4
  * Return the nanosecond (0-999) from a UTC datetime string.
@@ -20,7 +20,7 @@ export function parseNanosecondFromUtc(value, options) {
20
20
  if (!isOptionsArgument(options)) {
21
21
  return "";
22
22
  }
23
- const dateTime = utcZonedDateTime(value, options);
23
+ const dateTime = utcWallClock(value, options);
24
24
  return dateTime === null
25
25
  ? ""
26
26
  : dateTime.nanosecond.toString().padStart(3, "0");
@@ -14,8 +14,10 @@
14
14
  */
15
15
  export declare function parseSecondFromUtc(value: string, options?: {
16
16
  /**
17
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
18
- * the system time zone. An unknown zone returns `""`.
17
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
18
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
19
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
20
+ * `""`.
19
21
  *
20
22
  * @defaultValue `"UTC"`
21
23
  */
@@ -1,4 +1,4 @@
1
- import { utcZonedDateTime } from "../../internal/utcZonedDateTime.js";
1
+ import { utcWallClock } from "../../internal/utcWallClock.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
3
  /**
4
4
  * Return the second (0-59) from a UTC datetime string.
@@ -19,7 +19,7 @@ export function parseSecondFromUtc(value, options) {
19
19
  if (!isOptionsArgument(options)) {
20
20
  return "";
21
21
  }
22
- const dateTime = utcZonedDateTime(value, options);
22
+ const dateTime = utcWallClock(value, options);
23
23
  return dateTime === null ? "" : dateTime.second.toString().padStart(2, "0");
24
24
  }
25
25
  catch {
@@ -11,11 +11,14 @@
11
11
  * @example parseTimeFromUtc("2024-03-17T14:30:45Z") // "14:30:45"
12
12
  * @example parseTimeFromUtc("2024-03-17T14:30:45Z", { timeZone: "America/New_York" }) // "10:30:45"
13
13
  * @example parseTimeFromUtc("invalid") // ""
14
+ * @example parseTimeFromUtc("1970-01-01T12:44:30Z", { timeZone: "-00:44:30" }) // "12:00:00" (a stored offset with seconds)
14
15
  */
15
16
  export declare function parseTimeFromUtc(value: string, options?: {
16
17
  /**
17
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
18
- * the system time zone. An unknown zone returns `""`.
18
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
19
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
20
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
21
+ * `""`.
19
22
  *
20
23
  * @defaultValue `"UTC"`
21
24
  */
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
3
3
  import { isValidUtc } from "../validate/index.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
5
  /**
@@ -15,6 +15,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
15
15
  * @example parseTimeFromUtc("2024-03-17T14:30:45Z") // "14:30:45"
16
16
  * @example parseTimeFromUtc("2024-03-17T14:30:45Z", { timeZone: "America/New_York" }) // "10:30:45"
17
17
  * @example parseTimeFromUtc("invalid") // ""
18
+ * @example parseTimeFromUtc("1970-01-01T12:44:30Z", { timeZone: "-00:44:30" }) // "12:00:00" (a stored offset with seconds)
18
19
  */
19
20
  export function parseTimeFromUtc(value, options) {
20
21
  try {
@@ -24,13 +25,13 @@ export function parseTimeFromUtc(value, options) {
24
25
  if (!isValidUtc(value)) {
25
26
  return "";
26
27
  }
27
- const timeZone = normalizeTimeZone(options?.timeZone);
28
- if (timeZone === "") {
28
+ const frame = normalizeZoneFrame(options?.timeZone);
29
+ if (frame === null) {
29
30
  return "";
30
31
  }
31
32
  try {
32
33
  const instant = Temporal.Instant.from(value);
33
- const dateTime = instant.toZonedDateTimeISO(timeZone);
34
+ const dateTime = frameWallClock(instant, frame);
34
35
  return dateTime.toPlainTime().toString();
35
36
  }
36
37
  catch {
@@ -8,7 +8,7 @@ import { 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 UtcUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "day" |
34
34
  * - A `"week"` in late December can be week 1 of the next year, under either week numbering.
35
35
  * - `optionsArg` must be an object or omitted: a non-object value (such as `null`) returns "".
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 ISO UTC datetime string (e.g., "2024-03-17T14:30:45Z")
39
41
  * @param unit unit to extract from the datetime
@@ -42,10 +44,13 @@ export type UtcUnit = Temporal.SmallestUnit<"year" | "month" | "week" | "day" |
42
44
  *
43
45
  * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "month") // "03"
44
46
  * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "hours") // "14"
47
+ * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "year") // "2024"
48
+ * @example parseUnitFromUtc("0005-06-01T12:30:00Z", "year") // "0005"
45
49
  * @example parseUnitFromUtc("2024-03-17T02:30:45Z", "day", { timeZone: "America/New_York" }) // "16"
46
50
  * @example parseUnitFromUtc("2024-01-01T00:00:00Z", "week") // "1"
47
51
  * @example parseUnitFromUtc("2024-12-31T12:00:00Z", "week", { weekStartsOn: "sunday" }) // "1"
48
52
  * @example parseUnitFromUtc("invalid", "month") // ""
53
+ * @example parseUnitFromUtc("1970-01-01T12:44:30Z", "minute", { timeZone: "-00:44:30" }) // "00" (a stored offset with seconds)
49
54
  */
50
55
  export declare function parseUnitFromUtc(value: string, unit: UtcUnit, optionsArg?: {
51
56
  /**
@@ -58,8 +63,10 @@ export declare function parseUnitFromUtc(value: string, unit: UtcUnit, optionsAr
58
63
  */
59
64
  weekStartsOn?: "monday" | "sunday";
60
65
  /**
61
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
62
- * the system time zone. An unknown zone returns `""`.
66
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
67
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
68
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
69
+ * `""`.
63
70
  *
64
71
  * @defaultValue `"UTC"`
65
72
  */
@@ -1,11 +1,12 @@
1
1
  // fallow-ignore-file code-duplication -- cross-family Temporal type clone, by design (rule 5)
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
4
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
4
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
5
5
  import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
6
6
  import { getWeekNumber } from "../../plain/calculate/getWeekNumber.js";
7
7
  import { isValidUtc } from "../validate/index.js";
8
8
  import { isOptionsArgument } from "../../internal/isObject.js";
9
+ import { isoYearString } from "../../internal/isoYearString.js";
9
10
  /**
10
11
  * Extract a unit from a UTC datetime string.
11
12
  *
@@ -15,6 +16,8 @@ import { isOptionsArgument } from "../../internal/isObject.js";
15
16
  * - A `"week"` in late December can be week 1 of the next year, under either week numbering.
16
17
  * - `optionsArg` must be an object or omitted: a non-object value (such as `null`) returns "".
17
18
  * - Returns "" for invalid input.
19
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
20
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
18
21
  *
19
22
  * @param value ISO UTC datetime string (e.g., "2024-03-17T14:30:45Z")
20
23
  * @param unit unit to extract from the datetime
@@ -23,10 +26,13 @@ import { isOptionsArgument } from "../../internal/isObject.js";
23
26
  *
24
27
  * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "month") // "03"
25
28
  * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "hours") // "14"
29
+ * @example parseUnitFromUtc("2024-03-17T14:30:45Z", "year") // "2024"
30
+ * @example parseUnitFromUtc("0005-06-01T12:30:00Z", "year") // "0005"
26
31
  * @example parseUnitFromUtc("2024-03-17T02:30:45Z", "day", { timeZone: "America/New_York" }) // "16"
27
32
  * @example parseUnitFromUtc("2024-01-01T00:00:00Z", "week") // "1"
28
33
  * @example parseUnitFromUtc("2024-12-31T12:00:00Z", "week", { weekStartsOn: "sunday" }) // "1"
29
34
  * @example parseUnitFromUtc("invalid", "month") // ""
35
+ * @example parseUnitFromUtc("1970-01-01T12:44:30Z", "minute", { timeZone: "-00:44:30" }) // "00" (a stored offset with seconds)
30
36
  */
31
37
  export function parseUnitFromUtc(value, unit, optionsArg) {
32
38
  try {
@@ -35,15 +41,15 @@ export function parseUnitFromUtc(value, unit, optionsArg) {
35
41
  return "";
36
42
  }
37
43
  const weekStartsOn = resolveWeekStartsOn(optionsArg?.weekStartsOn);
38
- const timeZone = normalizeTimeZone(optionsArg?.timeZone);
39
- if (!isValidUtc(value) || weekStartsOn === null || timeZone === "") {
44
+ const frame = normalizeZoneFrame(optionsArg?.timeZone);
45
+ if (!isValidUtc(value) || weekStartsOn === null || frame === null) {
40
46
  return "";
41
47
  }
42
48
  try {
43
- const dateTime = Temporal.Instant.from(value).toZonedDateTimeISO(timeZone);
49
+ const dateTime = frameWallClock(Temporal.Instant.from(value), frame);
44
50
  switch (resolveDateTimeUnit(unit)) {
45
51
  case "year":
46
- return dateTime.year.toString();
52
+ return isoYearString(dateTime.year);
47
53
  case "month":
48
54
  return dateTime.month.toString().padStart(2, "0");
49
55
  case "week":
@@ -28,8 +28,10 @@ export declare function parseWeekFromUtc(value: string, optionsArg?: {
28
28
  */
29
29
  weekStartsOn?: "monday" | "sunday";
30
30
  /**
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 `null`.
31
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
32
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
33
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
34
+ * `null`.
33
35
  *
34
36
  * @defaultValue `"UTC"`
35
37
  */
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameWallClock, normalizeZoneFrame } from "../../internal/zoneFrame.js";
3
3
  import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
4
4
  import { getWeekNumber } from "../../plain/calculate/getWeekNumber.js";
5
5
  import { isValidUtc } from "../validate/index.js";
@@ -31,12 +31,12 @@ export function parseWeekFromUtc(value, optionsArg) {
31
31
  if (!isValidUtc(value))
32
32
  return null;
33
33
  const weekStartsOn = resolveWeekStartsOn(optionsArg?.weekStartsOn);
34
- const timeZone = normalizeTimeZone(optionsArg?.timeZone);
35
- if (weekStartsOn === null || timeZone === "")
34
+ const frame = normalizeZoneFrame(optionsArg?.timeZone);
35
+ if (weekStartsOn === null || frame === null)
36
36
  return null;
37
37
  try {
38
38
  const instant = Temporal.Instant.from(value);
39
- const dt = instant.toZonedDateTimeISO(timeZone);
39
+ const dt = frameWallClock(instant, frame);
40
40
  const dateStr = dt.toPlainDate().toString();
41
41
  return getWeekNumber(dateStr, weekStartsOn);
42
42
  }
@@ -1,21 +1,25 @@
1
1
  /**
2
2
  * Return the year from a UTC datetime string.
3
3
  *
4
- * - Returns the year as a string (e.g., "2024").
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 UTC datetime string (e.g., "2024-03-17T14:30:45Z")
8
9
  * @param options The time zone the value is read in
9
- * @returns Year (YYYY) or "" on invalid input
10
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
10
11
  *
11
12
  * @example parseYearFromUtc("2024-03-17T14:30:45Z") // "2024"
13
+ * @example parseYearFromUtc("0005-06-01T12:30:00Z") // "0005"
12
14
  * @example parseYearFromUtc("2025-01-01T02:00:00Z", { timeZone: "America/New_York" }) // "2024"
13
15
  * @example parseYearFromUtc("invalid") // ""
14
16
  */
15
17
  export declare function parseYearFromUtc(value: string, options?: {
16
18
  /**
17
- * The time zone the wall-clock fields are read in: an IANA name, a UTC offset, or `"local"` for
18
- * the system time zone. An unknown zone returns `""`.
19
+ * The time zone the wall-clock fields are read in: an IANA name, a UTC offset (a time zone
20
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
21
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
22
+ * `""`.
19
23
  *
20
24
  * @defaultValue `"UTC"`
21
25
  */
@@ -1,16 +1,19 @@
1
- import { utcZonedDateTime } from "../../internal/utcZonedDateTime.js";
1
+ import { utcWallClock } from "../../internal/utcWallClock.js";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
+ import { isoYearString } from "../../internal/isoYearString.js";
3
4
  /**
4
5
  * Return the year from a UTC datetime string.
5
6
  *
6
- * - Returns the year as a string (e.g., "2024").
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 UTC datetime string (e.g., "2024-03-17T14:30:45Z")
10
12
  * @param options The time zone the value is read in
11
- * @returns Year (YYYY) or "" on invalid input
13
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
12
14
  *
13
15
  * @example parseYearFromUtc("2024-03-17T14:30:45Z") // "2024"
16
+ * @example parseYearFromUtc("0005-06-01T12:30:00Z") // "0005"
14
17
  * @example parseYearFromUtc("2025-01-01T02:00:00Z", { timeZone: "America/New_York" }) // "2024"
15
18
  * @example parseYearFromUtc("invalid") // ""
16
19
  */
@@ -19,8 +22,8 @@ export function parseYearFromUtc(value, options) {
19
22
  if (!isOptionsArgument(options)) {
20
23
  return "";
21
24
  }
22
- const dateTime = utcZonedDateTime(value, options);
23
- return dateTime === null ? "" : dateTime.year.toString();
25
+ const dateTime = utcWallClock(value, options);
26
+ return dateTime === null ? "" : isoYearString(dateTime.year);
24
27
  }
25
28
  catch {
26
29
  // Never throws (Core Rule 3): a hostile
@@ -1,2 +1,4 @@
1
+ export * from "./isValidHttpDate.js";
1
2
  export * from "./isValidUtc.js";
2
3
  export * from "./isValidUtcRange.js";
4
+ export * from "./isValidUtcTimestamp.js";
@@ -1,2 +1,4 @@
1
+ export * from "./isValidHttpDate.js";
1
2
  export * from "./isValidUtc.js";
2
3
  export * from "./isValidUtcRange.js";
4
+ export * from "./isValidUtcTimestamp.js";
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Return true when `value` is a real HTTP header date: the RFC 9110 §5.6.7 HTTP-date that
3
+ * headers like `Last-Modified`, `Date` and `Expires` carry, such as
4
+ * `Fri, 15 Mar 2024 14:30:00 GMT`.
5
+ *
6
+ * - True exactly when `parseHttpDate` returns a UTC string for the same value: the validator
7
+ * calls the parser, so the two cannot disagree.
8
+ * - **All three HTTP-date formats**, which RFC 9110 §5.6.7 says a recipient "MUST accept":
9
+ * IMF-fixdate, and the obsolete rfc850-date (`Sunday, 06-Nov-94 08:49:37 GMT`) and asctime-date
10
+ * (`Sun Nov 6 08:49:37 1994`). The `httpDate` pattern matches IMF-fixdate alone.
11
+ * - Checks the calendar as well as the shape. The pattern matches a day that does not exist:
12
+ * `31 Feb`, `29 Feb 2023` and `31 Jun` are false here.
13
+ * - **The day name must match the date, in all three formats.** The pattern does not check it.
14
+ * - False for an hour above 23 and a minute above 59, which the pattern matches. False for a
15
+ * second of 60: GMT rejects leap seconds.
16
+ * - HTTP-date is case-sensitive and fixed-width, and its zone is the literal `GMT`: a numeric
17
+ * offset is false.
18
+ * - **An rfc850-date reads the clock.** Its two-digit year is read against the current instant
19
+ * (`Temporal.Now.instant()`), as `parseHttpDate` describes, so the same string can change its
20
+ * answer decades apart; if the clock cannot be read the answer is false. The other two formats
21
+ * never read the clock.
22
+ * - False for a non-string. Read the value with `parseHttpDate`; write one with `formatHttpDate`.
23
+ *
24
+ * @param value candidate RFC 9110 HTTP-date string
25
+ * @returns boolean indicating validity
26
+ *
27
+ * @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 GMT") // true
28
+ * @example isValidHttpDate("Sun Nov 6 08:49:37 1994") // true (asctime-date; the httpDate pattern does not match it)
29
+ * @example isValidHttpDate("Sat, 15 Mar 2024 14:30:00 GMT") // false (15 Mar 2024 was a Friday; the httpDate pattern matches it)
30
+ * @example isValidHttpDate("Wed, 29 Feb 2023 14:30:00 GMT") // false (2023 has no 29 February; the httpDate pattern matches it)
31
+ * @example isValidHttpDate("Fri, 15 Mar 2024 24:00:00 GMT") // false (hour 24; the httpDate pattern matches it)
32
+ * @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 -0400") // false (not an HTTP-date)
33
+ * @example isValidHttpDate("not a date") // false
34
+ */
35
+ export declare function isValidHttpDate(value: string): boolean;
@@ -0,0 +1,38 @@
1
+ import { parseHttpDate } from "../parse/parseHttpDate.js";
2
+ /**
3
+ * Return true when `value` is a real HTTP header date: the RFC 9110 §5.6.7 HTTP-date that
4
+ * headers like `Last-Modified`, `Date` and `Expires` carry, such as
5
+ * `Fri, 15 Mar 2024 14:30:00 GMT`.
6
+ *
7
+ * - True exactly when `parseHttpDate` returns a UTC string for the same value: the validator
8
+ * calls the parser, so the two cannot disagree.
9
+ * - **All three HTTP-date formats**, which RFC 9110 §5.6.7 says a recipient "MUST accept":
10
+ * IMF-fixdate, and the obsolete rfc850-date (`Sunday, 06-Nov-94 08:49:37 GMT`) and asctime-date
11
+ * (`Sun Nov 6 08:49:37 1994`). The `httpDate` pattern matches IMF-fixdate alone.
12
+ * - Checks the calendar as well as the shape. The pattern matches a day that does not exist:
13
+ * `31 Feb`, `29 Feb 2023` and `31 Jun` are false here.
14
+ * - **The day name must match the date, in all three formats.** The pattern does not check it.
15
+ * - False for an hour above 23 and a minute above 59, which the pattern matches. False for a
16
+ * second of 60: GMT rejects leap seconds.
17
+ * - HTTP-date is case-sensitive and fixed-width, and its zone is the literal `GMT`: a numeric
18
+ * offset is false.
19
+ * - **An rfc850-date reads the clock.** Its two-digit year is read against the current instant
20
+ * (`Temporal.Now.instant()`), as `parseHttpDate` describes, so the same string can change its
21
+ * answer decades apart; if the clock cannot be read the answer is false. The other two formats
22
+ * never read the clock.
23
+ * - False for a non-string. Read the value with `parseHttpDate`; write one with `formatHttpDate`.
24
+ *
25
+ * @param value candidate RFC 9110 HTTP-date string
26
+ * @returns boolean indicating validity
27
+ *
28
+ * @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 GMT") // true
29
+ * @example isValidHttpDate("Sun Nov 6 08:49:37 1994") // true (asctime-date; the httpDate pattern does not match it)
30
+ * @example isValidHttpDate("Sat, 15 Mar 2024 14:30:00 GMT") // false (15 Mar 2024 was a Friday; the httpDate pattern matches it)
31
+ * @example isValidHttpDate("Wed, 29 Feb 2023 14:30:00 GMT") // false (2023 has no 29 February; the httpDate pattern matches it)
32
+ * @example isValidHttpDate("Fri, 15 Mar 2024 24:00:00 GMT") // false (hour 24; the httpDate pattern matches it)
33
+ * @example isValidHttpDate("Fri, 15 Mar 2024 14:30:00 -0400") // false (not an HTTP-date)
34
+ * @example isValidHttpDate("not a date") // false
35
+ */
36
+ export function isValidHttpDate(value) {
37
+ return parseHttpDate(value) !== "";
38
+ }
@@ -6,6 +6,10 @@
6
6
  * - Reads RFC 9557 annotations as `Temporal.Instant.from` does: elective ones (`[foo=bar]`), a
7
7
  * time zone annotation and a calendar annotation are ignored (an instant has neither), and an
8
8
  * unknown critical one (`[!foo=bar]`) is rejected.
9
+ * - Accepts four forms beyond the timestamp shape `YYYY-MM-DDTHH:MM:SS[.f]Z`: a time without
10
+ * seconds, a comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations.
11
+ * For the plain RFC 3339 spelling that readers other than Temporal expect, use
12
+ * `isValidUtcTimestamp`, which is false for all four.
9
13
  * - Rejects leap seconds (e.g., "2024-12-31T23:59:60Z").
10
14
  * - Uses Temporal.Instant.from for validation.
11
15
  * - Requires a time component — date-only strings ("2024-01-01Z") are rejected.
@@ -10,6 +10,10 @@ import { utcDateTime } from "../../regex/utc-date-time.js";
10
10
  * - Reads RFC 9557 annotations as `Temporal.Instant.from` does: elective ones (`[foo=bar]`), a
11
11
  * time zone annotation and a calendar annotation are ignored (an instant has neither), and an
12
12
  * unknown critical one (`[!foo=bar]`) is rejected.
13
+ * - Accepts four forms beyond the timestamp shape `YYYY-MM-DDTHH:MM:SS[.f]Z`: a time without
14
+ * seconds, a comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations.
15
+ * For the plain RFC 3339 spelling that readers other than Temporal expect, use
16
+ * `isValidUtcTimestamp`, which is false for all four.
13
17
  * - Rejects leap seconds (e.g., "2024-12-31T23:59:60Z").
14
18
  * - Uses Temporal.Instant.from for validation.
15
19
  * - Requires a time component — date-only strings ("2024-01-01Z") are rejected.
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Return true when `value` is a real UTC instant written as `YYYY-MM-DDTHH:MM:SS[.f]Z` and
3
+ * nothing else: a narrower check than `isValidUtc`.
4
+ *
5
+ * - The shape is one spelling of the RFC 3339 §5.6 `date-time`: a four-digit year, `0000` to
6
+ * `9999` (`date-fullyear = 4DIGIT`), an upper-case `T`, a time with seconds, an optional
7
+ * fraction of one to nine digits after a dot (`time-secfrac = "." 1*DIGIT`; GMT stops at nine
8
+ * because Temporal keeps nanoseconds), and an upper-case `Z` with nothing after it.
9
+ * - Use it for a string headed for storage, or for a reader that is not Temporal: the shape is
10
+ * plain RFC 3339, and the one `Temporal.Instant.prototype.toString()`, called with no options,
11
+ * writes for years `0000` to `9999`.
12
+ * - Use `isValidUtc` when Temporal is the only reader. It also accepts a time without seconds, a
13
+ * comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations; all four are
14
+ * false here.
15
+ * - A subset of `isValidUtc`: every string that is true here is true there. The instant is
16
+ * checked as well as the shape, so a day that does not exist is false.
17
+ * - False for the other spellings §5.6 allows: a lower-case `t` or `z`, a space for `T` (its
18
+ * NOTE), and a numeric offset, `+00:00` included. `isValidRfc3339DateTime` checks the whole
19
+ * grammar, with the same two GMT limits.
20
+ * - False for a leap second (`:60`), although §5.6 `time-second` admits it: GMT rejects leap
21
+ * seconds because Temporal would read one as `:59`.
22
+ * - Not one canonical spelling: `12:00:00Z` and `12:00:00.000Z` are one instant and both are
23
+ * true. A reader may still refuse or round a string that is true here: PostgreSQL has no year
24
+ * `0000` and keeps microseconds. See `toPgMicroseconds` and `precision/`.
25
+ * - False for a non-string.
26
+ *
27
+ * @param value candidate UTC timestamp string
28
+ * @returns true when `value` is a real UTC instant in this shape, or false on invalid input
29
+ *
30
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00Z") // true
31
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00.123456789Z") // true (nine fraction digits)
32
+ * @example isValidUtcTimestamp("0000-01-01T00:00:00Z") // true (year 0000)
33
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00Z[Europe/Paris]") // false (RFC 9557 annotation; isValidUtc accepts it)
34
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00,5Z") // false (comma before the fraction; isValidUtc accepts it)
35
+ * @example isValidUtcTimestamp("-005000-01-01T00:00:00Z") // false (expanded year; isValidUtc accepts it)
36
+ * @example isValidUtcTimestamp("2026-10-06T12:00Z") // false (no seconds; isValidUtc accepts it)
37
+ * @example isValidUtcTimestamp("2026-10-06t12:00:00z") // false (lower-case t and z)
38
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00+00:00") // false (a numeric offset, not Z)
39
+ * @example isValidUtcTimestamp("2026-02-30T00:00:00Z") // false (February has no 30th; the rfc3339DateTime pattern matches it)
40
+ * @example isValidUtcTimestamp("2016-12-31T23:59:60Z") // false (leap second)
41
+ * @example isValidUtcTimestamp("not a date") // false
42
+ */
43
+ export declare function isValidUtcTimestamp(value: string): boolean;
@@ -0,0 +1,48 @@
1
+ import { rfc3339DateTime } from "../../regex/rfc-3339.js";
2
+ import { isValidUtc } from "./isValidUtc.js";
3
+ /**
4
+ * Return true when `value` is a real UTC instant written as `YYYY-MM-DDTHH:MM:SS[.f]Z` and
5
+ * nothing else: a narrower check than `isValidUtc`.
6
+ *
7
+ * - The shape is one spelling of the RFC 3339 §5.6 `date-time`: a four-digit year, `0000` to
8
+ * `9999` (`date-fullyear = 4DIGIT`), an upper-case `T`, a time with seconds, an optional
9
+ * fraction of one to nine digits after a dot (`time-secfrac = "." 1*DIGIT`; GMT stops at nine
10
+ * because Temporal keeps nanoseconds), and an upper-case `Z` with nothing after it.
11
+ * - Use it for a string headed for storage, or for a reader that is not Temporal: the shape is
12
+ * plain RFC 3339, and the one `Temporal.Instant.prototype.toString()`, called with no options,
13
+ * writes for years `0000` to `9999`.
14
+ * - Use `isValidUtc` when Temporal is the only reader. It also accepts a time without seconds, a
15
+ * comma before the fraction, an expanded `±YYYYYY` year and RFC 9557 annotations; all four are
16
+ * false here.
17
+ * - A subset of `isValidUtc`: every string that is true here is true there. The instant is
18
+ * checked as well as the shape, so a day that does not exist is false.
19
+ * - False for the other spellings §5.6 allows: a lower-case `t` or `z`, a space for `T` (its
20
+ * NOTE), and a numeric offset, `+00:00` included. `isValidRfc3339DateTime` checks the whole
21
+ * grammar, with the same two GMT limits.
22
+ * - False for a leap second (`:60`), although §5.6 `time-second` admits it: GMT rejects leap
23
+ * seconds because Temporal would read one as `:59`.
24
+ * - Not one canonical spelling: `12:00:00Z` and `12:00:00.000Z` are one instant and both are
25
+ * true. A reader may still refuse or round a string that is true here: PostgreSQL has no year
26
+ * `0000` and keeps microseconds. See `toPgMicroseconds` and `precision/`.
27
+ * - False for a non-string.
28
+ *
29
+ * @param value candidate UTC timestamp string
30
+ * @returns true when `value` is a real UTC instant in this shape, or false on invalid input
31
+ *
32
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00Z") // true
33
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00.123456789Z") // true (nine fraction digits)
34
+ * @example isValidUtcTimestamp("0000-01-01T00:00:00Z") // true (year 0000)
35
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00Z[Europe/Paris]") // false (RFC 9557 annotation; isValidUtc accepts it)
36
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00,5Z") // false (comma before the fraction; isValidUtc accepts it)
37
+ * @example isValidUtcTimestamp("-005000-01-01T00:00:00Z") // false (expanded year; isValidUtc accepts it)
38
+ * @example isValidUtcTimestamp("2026-10-06T12:00Z") // false (no seconds; isValidUtc accepts it)
39
+ * @example isValidUtcTimestamp("2026-10-06t12:00:00z") // false (lower-case t and z)
40
+ * @example isValidUtcTimestamp("2026-10-06T12:00:00+00:00") // false (a numeric offset, not Z)
41
+ * @example isValidUtcTimestamp("2026-02-30T00:00:00Z") // false (February has no 30th; the rfc3339DateTime pattern matches it)
42
+ * @example isValidUtcTimestamp("2016-12-31T23:59:60Z") // false (leap second)
43
+ * @example isValidUtcTimestamp("not a date") // false
44
+ */
45
+ export function isValidUtcTimestamp(value) {
46
+ // `isValidUtc` goes first: it stops a non-string before the pattern would read it as text.
47
+ return isValidUtc(value) && rfc3339DateTime.test(value);
48
+ }
@@ -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 { addToZonedDisambiguated, calendarSystemOfZonedValue, formatZonedInCalendar, isValidAmount, parseCalendarZonedValue, resolveOverflow, } from "../../internal/index.js";
2
+ import { addToZonedDisambiguated, calendarSystemOfZonedValue, formatZonedInCalendar, parseCalendarZonedValue, readDurationUnits, resolveOverflow, } from "../../internal/index.js";
3
3
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
4
4
  import { isValidCalendarZonedDateTime } from "../validate/index.js";
5
5
  import { isOptionsArgument } from "../../internal/isObject.js";
@@ -62,11 +62,8 @@ export function addZoned(value, units, optionsArg) {
62
62
  return "";
63
63
  }
64
64
  const validZonedDateTime = isValidCalendarZonedDateTime(value);
65
- const validUnits = typeof units === "object" &&
66
- units !== null &&
67
- Object.keys(units).every(isValidDateTimeDurationUnit);
68
- const validAmounts = validUnits && Object.values(units).every(isValidAmount);
69
- if (!validZonedDateTime || !validUnits || !validAmounts) {
65
+ const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
66
+ if (!validZonedDateTime || amounts === null) {
70
67
  // TODO descriptive messages of what failed - likely could be GMT offset for historical changes and DST
71
68
  return "";
72
69
  }
@@ -78,7 +75,7 @@ export function addZoned(value, units, optionsArg) {
78
75
  return "";
79
76
  }
80
77
  const zoned = parseCalendarZonedValue(value);
81
- const added = addToZonedDisambiguated(zoned, units, 1, {
78
+ const added = addToZonedDisambiguated(zoned, amounts, 1, {
82
79
  overflow,
83
80
  disambiguation,
84
81
  });