@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
@@ -35,6 +35,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
35
35
  * - Each value is a safe integer or a digit string (`"1706659200000"`); anything else is invalid.
36
36
  * - Unit names may be singular or plural (`"day"` or `"days"`), as in Temporal; a record result
37
37
  * keeps the plural keys.
38
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
39
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
40
+ * offset's seconds (under a minute) of the last instant Temporal supports
41
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
42
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
43
+ * such limit.
38
44
  *
39
45
  * @param value1 first Unix epoch: a safe integer, or a string of optionally negative ASCII digits
40
46
  * @param value2 second Unix epoch, in the same form and unit
@@ -58,8 +64,10 @@ export declare function diffUnix(value1: number | string, value2: number | strin
58
64
  */
59
65
  epochUnit?: UnixUnit;
60
66
  /**
61
- * The time zone calendar units are measured in: an IANA name, a UTC offset, or `"local"` for
62
- * the system time zone. An unknown zone returns `null`.
67
+ * The time zone calendar units are measured in: an IANA name, a UTC offset (a time zone
68
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
69
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
70
+ * `null`.
63
71
  *
64
72
  * @defaultValue `"UTC"`
65
73
  */
@@ -1,6 +1,5 @@
1
- import { addToZoned, resolveDurationUnit, zonedUntil } from "../../internal/index.js";
1
+ import { addToZoned, frameZoned, normalizeZoneFrame, resolveDurationUnit, zonedUntil, } from "../../internal/index.js";
2
2
  import { differenceRecord } from "../../internal/differenceRecord.js";
3
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
4
3
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
5
4
  import { getLargestDateTimeDurationUnit } from "../../plain/calculate/getLargestDateTimeDurationUnit.js";
6
5
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
@@ -39,6 +38,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
39
38
  * - Each value is a safe integer or a digit string (`"1706659200000"`); anything else is invalid.
40
39
  * - Unit names may be singular or plural (`"day"` or `"days"`), as in Temporal; a record result
41
40
  * keeps the plural keys.
41
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
42
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
43
+ * offset's seconds (under a minute) of the last instant Temporal supports
44
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
45
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
46
+ * such limit.
42
47
  *
43
48
  * @param value1 first Unix epoch: a safe integer, or a string of optionally negative ASCII digits
44
49
  * @param value2 second Unix epoch, in the same form and unit
@@ -60,8 +65,8 @@ export function diffUnix(value1, value2, units, options) {
60
65
  return null;
61
66
  }
62
67
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
63
- const timeZone = normalizeTimeZone(options?.timeZone);
64
- if (!timeZone || epochUnit === null)
68
+ const frame = normalizeZoneFrame(options?.timeZone);
69
+ if (frame === null || epochUnit === null)
65
70
  return null;
66
71
  const requested = Array.isArray(units) ? units : [units];
67
72
  const plurals = requested.map((unit) => typeof unit === "string" ? resolveDurationUnit(unit) : "");
@@ -77,7 +82,7 @@ export function diffUnix(value1, value2, units, options) {
77
82
  if (largestUnit === "")
78
83
  return null;
79
84
  try {
80
- const duration = zonedUntil(instant1.toZonedDateTimeISO(timeZone), instant2.toZonedDateTimeISO(timeZone), {
85
+ const duration = zonedUntil(frameZoned(instant1, frame), frameZoned(instant2, frame), {
81
86
  largestUnit,
82
87
  smallestUnit: options?.smallestUnit,
83
88
  roundingIncrement: options?.roundingIncrement,
@@ -87,7 +92,7 @@ export function diffUnix(value1, value2, units, options) {
87
92
  return duration[plurals[0]] ?? 0;
88
93
  }
89
94
  // An unlisted unit between two listed units is carried into the next smaller listed unit.
90
- const start = instant1.toZonedDateTimeISO(timeZone);
95
+ const start = frameZoned(instant1, frame);
91
96
  // Record keys are the plural names, as in every other diff family.
92
97
  return differenceRecord(start, duration, plurals, {
93
98
  add: (from, amount) => addToZoned(from, amount),
@@ -24,6 +24,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
24
24
  * different Temporal types.
25
25
  * - Each value is a safe integer or a digit string (`"1706659200000"`); anything else is invalid.
26
26
  * - Unit names may be singular or plural (`"day"` or `"days"`), as in Temporal.
27
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
28
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
29
+ * offset's seconds (under a minute) of the last instant Temporal supports
30
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
31
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
32
+ * such limit.
27
33
  *
28
34
  * @param value1 first Unix epoch: a safe integer, or a string of optionally negative ASCII digits
29
35
  * @param value2 second Unix epoch, in the same form and unit
@@ -46,8 +52,10 @@ export declare function diffUnixAsDuration(value1: number | string, value2: numb
46
52
  */
47
53
  epochUnit?: UnixUnit;
48
54
  /**
49
- * The time zone calendar units are measured in: an IANA name, a UTC offset, or `"local"` for
50
- * the system time zone. An unknown zone returns `""`.
55
+ * The time zone calendar units are measured in: an IANA name, a UTC offset (a time zone
56
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
57
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
58
+ * `""`.
51
59
  *
52
60
  * @defaultValue `"UTC"`
53
61
  */
@@ -1,5 +1,4 @@
1
- import { durationUntilString, resolveDurationUnit } from "../../internal/index.js";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
1
+ import { durationUntilString, frameZoned, normalizeZoneFrame, resolveDurationUnit, } from "../../internal/index.js";
3
2
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
3
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
5
4
  import { isOptionsArgument } from "../../internal/isObject.js";
@@ -26,6 +25,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
26
25
  * different Temporal types.
27
26
  * - Each value is a safe integer or a digit string (`"1706659200000"`); anything else is invalid.
28
27
  * - Unit names may be singular or plural (`"day"` or `"days"`), as in Temporal.
28
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
29
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
30
+ * offset's seconds (under a minute) of the last instant Temporal supports
31
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
32
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
33
+ * such limit.
29
34
  *
30
35
  * @param value1 first Unix epoch: a safe integer, or a string of optionally negative ASCII digits
31
36
  * @param value2 second Unix epoch, in the same form and unit
@@ -46,8 +51,8 @@ export function diffUnixAsDuration(value1, value2, unit, options) {
46
51
  return "";
47
52
  }
48
53
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
49
- const timeZone = normalizeTimeZone(options?.timeZone);
50
- if (!timeZone || epochUnit === null)
54
+ const frame = normalizeZoneFrame(options?.timeZone);
55
+ if (frame === null || epochUnit === null)
51
56
  return "";
52
57
  const largestUnit = typeof unit === "string" ? resolveDurationUnit(unit) : unit;
53
58
  if (!isValidDateTimeDurationUnit(largestUnit)) {
@@ -59,7 +64,7 @@ export function diffUnixAsDuration(value1, value2, unit, options) {
59
64
  return "";
60
65
  }
61
66
  try {
62
- return durationUntilString(instant1.toZonedDateTimeISO(timeZone), instant2.toZonedDateTimeISO(timeZone), largestUnit, options);
67
+ return durationUntilString(frameZoned(instant1, frame), frameZoned(instant2, frame), largestUnit, options);
63
68
  }
64
69
  catch {
65
70
  return "";
@@ -9,6 +9,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
9
9
  * takes neither. Those ignored options were removed in 1.16.0.
10
10
  * - Returns null for invalid input.
11
11
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
12
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
13
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
14
+ * offset's seconds (under a minute) of the last instant Temporal supports
15
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
16
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
17
+ * such limit.
12
18
  *
13
19
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
14
20
  * @param options optional: how `value` is read and the zone the quarter is found in
@@ -28,8 +34,10 @@ export declare function endOfQuarterForUnix(value: number | string, options?: {
28
34
  */
29
35
  epochUnit?: UnixUnit;
30
36
  /**
31
- * The time zone the unit boundaries are found in: an IANA name, a UTC offset, or `"local"` for
32
- * the system time zone. An unknown zone returns `null`.
37
+ * The time zone the unit boundaries are found in: an IANA name, a UTC offset (a time zone
38
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
39
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
40
+ * `null`.
33
41
  *
34
42
  * @defaultValue `"UTC"`
35
43
  */
@@ -10,6 +10,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
10
10
  * takes neither. Those ignored options were removed in 1.16.0.
11
11
  * - Returns null for invalid input.
12
12
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
13
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
14
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
15
+ * offset's seconds (under a minute) of the last instant Temporal supports
16
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
17
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
18
+ * such limit.
13
19
  *
14
20
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
21
  * @param options optional: how `value` is read and the zone the quarter is found in
@@ -10,6 +10,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
10
10
  * takes neither. Those ignored options were removed in 1.16.0.
11
11
  * - Returns null for invalid input.
12
12
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
13
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
14
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
15
+ * offset's seconds (under a minute) of the last instant Temporal supports
16
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
17
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
18
+ * such limit.
13
19
  *
14
20
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
21
  * @param unit Temporal.DateUnit | Temporal.TimeUnit to specify the end
@@ -24,6 +30,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
24
30
  * @example endOfUnix(1706780800, "days", { epochUnit: "second" }) // 1706831999 (plural unit, singular epochUnit, UTC by default)
25
31
  * @example endOfUnix(1706659200000, "quarter") // null (use endOfQuarterForUnix)
26
32
  * @example endOfUnix(NaN, "day") // null
33
+ * @example endOfUnix(45870000, "day", { timeZone: "-00:44:30" }) // 89069999 (a stored offset with seconds)
27
34
  */
28
35
  export declare function endOfUnix(value: number | string, unit: Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>, options?: {
29
36
  /**
@@ -34,8 +41,10 @@ export declare function endOfUnix(value: number | string, unit: Temporal.DateTim
34
41
  */
35
42
  epochUnit?: UnixUnit;
36
43
  /**
37
- * The time zone the unit boundaries are found in: an IANA name, a UTC offset, or `"local"` for
38
- * the system time zone. An unknown zone returns `null`.
44
+ * The time zone the unit boundaries are found in: an IANA name, a UTC offset (a time zone
45
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
46
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
47
+ * `null`.
39
48
  *
40
49
  * @defaultValue `"UTC"`
41
50
  */
@@ -12,6 +12,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
12
12
  * takes neither. Those ignored options were removed in 1.16.0.
13
13
  * - Returns null for invalid input.
14
14
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
15
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
16
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
17
+ * offset's seconds (under a minute) of the last instant Temporal supports
18
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
19
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
20
+ * such limit.
15
21
  *
16
22
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
17
23
  * @param unit Temporal.DateUnit | Temporal.TimeUnit to specify the end
@@ -26,6 +32,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
26
32
  * @example endOfUnix(1706780800, "days", { epochUnit: "second" }) // 1706831999 (plural unit, singular epochUnit, UTC by default)
27
33
  * @example endOfUnix(1706659200000, "quarter") // null (use endOfQuarterForUnix)
28
34
  * @example endOfUnix(NaN, "day") // null
35
+ * @example endOfUnix(45870000, "day", { timeZone: "-00:44:30" }) // 89069999 (a stored offset with seconds)
29
36
  */
30
37
  export function endOfUnix(value, unit, options) {
31
38
  try {
@@ -28,8 +28,9 @@ export declare function isBetweenUnix(value: number | string, start: number | st
28
28
  epochUnit?: UnixUnit;
29
29
  /**
30
30
  * A time zone that is validated only: the comparison is on exact instants, so the zone never
31
- * changes the result. It is an IANA name, a UTC offset, or `"local"` for the system time zone.
32
- * An unknown zone returns `false`.
31
+ * changes the result. It is an IANA name, a UTC offset (a time zone identifier such as
32
+ * `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what `getTimeZoneOffset`
33
+ * returns), or `"local"` for the system time zone. An unknown zone returns `false`.
33
34
  *
34
35
  * @defaultValue `"UTC"`
35
36
  */
@@ -1,6 +1,6 @@
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
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
3
+ import { normalizeZoneFrame } from "../../internal/zoneFrame.js";
4
4
  import { resolveUnixEpochUnit, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
5
5
  import { isOptionsArgument } from "../../internal/isObject.js";
6
6
  import { optionOrDefault } from "../../internal/optionOrDefault.js";
@@ -29,14 +29,14 @@ export function isBetweenUnix(value, start, end, options) {
29
29
  return false;
30
30
  }
31
31
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
32
- const timeZone = normalizeTimeZone(options?.timeZone);
32
+ const frame = normalizeZoneFrame(options?.timeZone);
33
33
  // Only an omitted flag takes the `true` default. An explicit `null` is a value, and every
34
34
  // reading of it gives `false`: ECMA-402 reads a boolean option through ToBoolean (null → false),
35
35
  // and the house rule rejects an invalid member outright — neither yields `true`. So `null`
36
36
  // behaves here exactly as `0` and `""` already do.
37
37
  const inclusiveStart = optionOrDefault(options?.inclusiveStart, true);
38
38
  const inclusiveEnd = optionOrDefault(options?.inclusiveEnd, true);
39
- if (!timeZone || epochUnit === null)
39
+ if (frame === null || epochUnit === null)
40
40
  return false;
41
41
  const instant = unixEpochToInstant(value, epochUnit);
42
42
  const startInstant = unixEpochToInstant(start, epochUnit);
@@ -15,6 +15,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
15
15
  * Use `floorToZone` for a boundary that never exceeds the instant.
16
16
  * - `value` is a safe integer or a digit string (`"1706661000000"`); anything else returns null.
17
17
  * - Returns null for invalid input.
18
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
19
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
20
+ * offset's seconds (under a minute) of the last instant Temporal supports
21
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
22
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
23
+ * such limit.
18
24
  *
19
25
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
20
26
  * @param options rounding settings: the unit to round to, how to round, and how `value` is read
@@ -60,8 +66,10 @@ export declare function roundUnix(value: number | string, options: {
60
66
  */
61
67
  epochUnit?: UnixUnit;
62
68
  /**
63
- * The time zone the wall clock is rounded in: an IANA name, a UTC offset, or `"local"` for the
64
- * system time zone. An unknown zone returns `null`.
69
+ * The time zone the wall clock is rounded in: an IANA name, a UTC offset (a time zone
70
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
71
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
72
+ * `null`.
65
73
  *
66
74
  * @defaultValue `"UTC"`
67
75
  */
@@ -1,6 +1,5 @@
1
1
  import { isValidDateTimeUnit } from "../../plain/index.js";
2
- import { isObject, resolveDateTimeUnit, roundZonedDateTime, } from "../../internal/index.js";
3
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
2
+ import { frameInstant, frameZoned, isObject, normalizeZoneFrame, resolveDateTimeUnit, roundZonedDateTime, } from "../../internal/index.js";
4
3
  import { resolveUnixEpochUnit, toUnixEpoch, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
5
4
  const ZONED_ROUNDING_UNITS = [
6
5
  "day",
@@ -29,6 +28,12 @@ function isZonedRoundingUnit(unit) {
29
28
  * Use `floorToZone` for a boundary that never exceeds the instant.
30
29
  * - `value` is a safe integer or a digit string (`"1706661000000"`); anything else returns null.
31
30
  * - Returns null for invalid input.
31
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
32
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
33
+ * offset's seconds (under a minute) of the last instant Temporal supports
34
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
35
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
36
+ * such limit.
32
37
  *
33
38
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
34
39
  * @param options rounding settings: the unit to round to, how to round, and how `value` is read
@@ -50,10 +55,12 @@ export function roundUnix(value, options) {
50
55
  return null;
51
56
  const { roundingIncrement, roundingMode } = options;
52
57
  const epochUnit = resolveUnixEpochUnit(options.epochUnit);
53
- const timeZone = normalizeTimeZone(options.timeZone);
58
+ const frame = normalizeZoneFrame(options.timeZone);
54
59
  // One read (GetOption): resolveDateTimeUnit returns a value that is not a string unchanged.
55
60
  const smallestUnit = resolveDateTimeUnit(options.smallestUnit);
56
- if (!timeZone || epochUnit === null || !isValidDateTimeUnit(smallestUnit)) {
61
+ if (frame === null ||
62
+ epochUnit === null ||
63
+ !isValidDateTimeUnit(smallestUnit)) {
57
64
  return null;
58
65
  }
59
66
  // Temporal ZonedDateTime.prototype.round: ValidateTemporalUnitValue(smallestUnit, ~time~, « day »)
@@ -65,12 +72,12 @@ export function roundUnix(value, options) {
65
72
  return null;
66
73
  }
67
74
  try {
68
- const result = roundZonedDateTime(instant.toZonedDateTimeISO(timeZone), {
75
+ const result = roundZonedDateTime(frameZoned(instant, frame), {
69
76
  smallestUnit,
70
77
  roundingIncrement,
71
78
  roundingMode,
72
79
  });
73
- return toUnixEpoch(result, epochUnit);
80
+ return toUnixEpoch(frameInstant(result, frame), epochUnit);
74
81
  }
75
82
  catch {
76
83
  return null;
@@ -10,10 +10,28 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
10
10
  * why order-independent field resolution matters, and why `disambiguation`/`offset` require
11
11
  * `.with()` rather than arithmetic.
12
12
  * - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
13
- * `millisecond`, `microsecond`, `nanosecond`, `era`, and/or `eraYear`; omitted fields keep
14
- * their current value. An empty object is a no-op.
13
+ * `millisecond`, `microsecond` and/or `nanosecond`; omitted fields keep their current value. An
14
+ * object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
15
+ * - Values are not converted: `monthCode` must be a string and every other field an integer number.
16
+ * `null`, a numeric string, a boolean or a fraction returns null, where Temporal would convert or
17
+ * truncate it. A bigint, `NaN` or an infinity returns null too. A number too large for its
18
+ * field follows `overflow`. A month or day below 1, or a date outside Temporal's range, returns
19
+ * null.
20
+ * - An own key that is not one of these fields, such as a misspelt `yaer`, returns null. So does an
21
+ * era, an `offset`, or a `calendar` or `timeZone` property, whether own, inherited or a getter. A
22
+ * field is read with a property get, as Temporal reads it, so an inherited or getter field is
23
+ * set.
24
+ * - A Temporal date or time object returns null, as Temporal's `with` refuses one. One whose
25
+ * prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
26
+ * nothing instead.
15
27
  * - `value` is a safe integer or a digit string (`"1710072000000"`); anything else returns null.
16
28
  * - Returns null for invalid input.
29
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
30
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
31
+ * offset's seconds (under a minute) of the last instant Temporal supports
32
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
33
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
34
+ * such limit.
17
35
  *
18
36
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
19
37
  * @param fields Partial<Temporal.ZonedDateTimeLike> object (excluding calendar/timeZone/offset) specifying fields to set
@@ -25,9 +43,10 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
25
43
  * @example setUnix(1706659200000, {}, { timeZone: "UTC" }) // 1706659200000 (empty fields object is a no-op)
26
44
  * @example setUnix(1730615400000, { minute: 45 }, { timeZone: "America/New_York" }) // 1730616300000 (the second 01:30 keeps -05:00)
27
45
  * @example setUnix(1730615400000, { minute: 45 }, { timeZone: "America/New_York", offset: "ignore" }) // 1730612700000 (re-resolved: the earlier 01:45)
46
+ * @example setUnix(1710072000000, { hour: "9" }, { timeZone: "UTC" }) // null (not converted)
28
47
  * @example setUnix(NaN, { hour: 9 }) // null
29
48
  */
30
- export declare function setUnix(value: number | string, fields: Omit<Temporal.ZonedDateTimeLike, "calendar" | "timeZone" | "offset">, options?: {
49
+ export declare function setUnix(value: number | string, fields: Omit<Temporal.ZonedDateTimeLike, "calendar" | "timeZone" | "offset" | "era" | "eraYear">, options?: {
31
50
  /**
32
51
  * The unit the epoch values are counted in: `"seconds"` or `"milliseconds"`, singular or
33
52
  * plural. Any other value returns `null`. The result is in the same unit.
@@ -36,8 +55,9 @@ export declare function setUnix(value: number | string, fields: Omit<Temporal.Zo
36
55
  */
37
56
  epochUnit?: UnixUnit;
38
57
  /**
39
- * The time zone the fields are set in: an IANA name, a UTC offset, or `"local"` for the system
40
- * time zone. An unknown zone returns `null`.
58
+ * The time zone the fields are set in: an IANA name, a UTC offset (a time zone identifier such
59
+ * as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what `getTimeZoneOffset`
60
+ * returns), or `"local"` for the system time zone. An unknown zone returns `null`.
41
61
  *
42
62
  * @defaultValue `"UTC"`
43
63
  */
@@ -1,5 +1,4 @@
1
- import { resolveOverflow, withZonedFields } from "../../internal/index.js";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
1
+ import { DATE_TIME_FIELDS, frameInstant, frameZoned, normalizeZoneFrame, readSetFields, resolveOverflow, withZonedFields, } from "../../internal/index.js";
3
2
  import { resolveUnixEpochUnit, toUnixEpoch, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
3
  import { isOptionsArgument } from "../../internal/isObject.js";
5
4
  import { optionOrDefault } from "../../internal/optionOrDefault.js";
@@ -12,10 +11,28 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
12
11
  * why order-independent field resolution matters, and why `disambiguation`/`offset` require
13
12
  * `.with()` rather than arithmetic.
14
13
  * - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
15
- * `millisecond`, `microsecond`, `nanosecond`, `era`, and/or `eraYear`; omitted fields keep
16
- * their current value. An empty object is a no-op.
14
+ * `millisecond`, `microsecond` and/or `nanosecond`; omitted fields keep their current value. An
15
+ * object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
16
+ * - Values are not converted: `monthCode` must be a string and every other field an integer number.
17
+ * `null`, a numeric string, a boolean or a fraction returns null, where Temporal would convert or
18
+ * truncate it. A bigint, `NaN` or an infinity returns null too. A number too large for its
19
+ * field follows `overflow`. A month or day below 1, or a date outside Temporal's range, returns
20
+ * null.
21
+ * - An own key that is not one of these fields, such as a misspelt `yaer`, returns null. So does an
22
+ * era, an `offset`, or a `calendar` or `timeZone` property, whether own, inherited or a getter. A
23
+ * field is read with a property get, as Temporal reads it, so an inherited or getter field is
24
+ * set.
25
+ * - A Temporal date or time object returns null, as Temporal's `with` refuses one. One whose
26
+ * prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
27
+ * nothing instead.
17
28
  * - `value` is a safe integer or a digit string (`"1710072000000"`); anything else returns null.
18
29
  * - Returns null for invalid input.
30
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
31
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
32
+ * offset's seconds (under a minute) of the last instant Temporal supports
33
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
34
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
35
+ * such limit.
19
36
  *
20
37
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
21
38
  * @param fields Partial<Temporal.ZonedDateTimeLike> object (excluding calendar/timeZone/offset) specifying fields to set
@@ -27,6 +44,7 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
27
44
  * @example setUnix(1706659200000, {}, { timeZone: "UTC" }) // 1706659200000 (empty fields object is a no-op)
28
45
  * @example setUnix(1730615400000, { minute: 45 }, { timeZone: "America/New_York" }) // 1730616300000 (the second 01:30 keeps -05:00)
29
46
  * @example setUnix(1730615400000, { minute: 45 }, { timeZone: "America/New_York", offset: "ignore" }) // 1730612700000 (re-resolved: the earlier 01:45)
47
+ * @example setUnix(1710072000000, { hour: "9" }, { timeZone: "UTC" }) // null (not converted)
30
48
  * @example setUnix(NaN, { hour: 9 }) // null
31
49
  */
32
50
  export function setUnix(value, fields, options) {
@@ -35,8 +53,8 @@ export function setUnix(value, fields, options) {
35
53
  return null;
36
54
  }
37
55
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
38
- const timeZone = normalizeTimeZone(options?.timeZone);
39
- if (!timeZone || epochUnit === null)
56
+ const frame = normalizeZoneFrame(options?.timeZone);
57
+ if (frame === null || epochUnit === null)
40
58
  return null;
41
59
  const instant = unixEpochToInstant(value, epochUnit);
42
60
  if (instant === null)
@@ -46,17 +64,20 @@ export function setUnix(value, fields, options) {
46
64
  // Temporal ZonedDateTime.prototype.with: GetTemporalOffsetOption(options, "prefer").
47
65
  const offset = optionOrDefault(options?.offset, "prefer");
48
66
  try {
49
- const zoned = instant.toZonedDateTimeISO(timeZone);
50
- // Temporal.ZonedDateTime.prototype.with() throws on an empty fields object ("no supported
51
- // properties found") rather than treating it as a no-op, so short-circuit here.
52
- const result = Object.keys(fields).length === 0
67
+ const zoned = frameZoned(instant, frame);
68
+ const set = readSetFields(fields, DATE_TIME_FIELDS);
69
+ if (set === null)
70
+ return null;
71
+ // Only the values readSetFields checked reach Temporal, on both paths of withZonedFields. An
72
+ // empty result sets nothing: a no-op here, where Temporal's with() would throw.
73
+ const result = Object.keys(set).length === 0
53
74
  ? zoned
54
- : withZonedFields(zoned, fields, {
75
+ : withZonedFields(zoned, set, {
55
76
  overflow,
56
77
  disambiguation,
57
78
  offset,
58
79
  });
59
- return toUnixEpoch(result, epochUnit);
80
+ return toUnixEpoch(frameInstant(result, frame), epochUnit);
60
81
  }
61
82
  catch {
62
83
  return null;
@@ -9,6 +9,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
9
9
  * takes neither. Those ignored options were removed in 1.16.0.
10
10
  * - Returns null for invalid input.
11
11
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
12
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
13
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
14
+ * offset's seconds (under a minute) of the last instant Temporal supports
15
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
16
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
17
+ * such limit.
12
18
  *
13
19
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
14
20
  * @param options optional: how `value` is read and the zone the quarter is found in
@@ -29,8 +35,10 @@ export declare function startOfQuarterForUnix(value: number | string, options?:
29
35
  */
30
36
  epochUnit?: UnixUnit;
31
37
  /**
32
- * The time zone the unit boundaries are found in: an IANA name, a UTC offset, or `"local"` for
33
- * the system time zone. An unknown zone returns `null`.
38
+ * The time zone the unit boundaries are found in: an IANA name, a UTC offset (a time zone
39
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
40
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
41
+ * `null`.
34
42
  *
35
43
  * @defaultValue `"UTC"`
36
44
  */
@@ -10,6 +10,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
10
10
  * takes neither. Those ignored options were removed in 1.16.0.
11
11
  * - Returns null for invalid input.
12
12
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
13
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
14
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
15
+ * offset's seconds (under a minute) of the last instant Temporal supports
16
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
17
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
18
+ * such limit.
13
19
  *
14
20
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
21
  * @param options optional: how `value` is read and the zone the quarter is found in
@@ -10,6 +10,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
10
10
  * takes neither. Those ignored options were removed in 1.16.0.
11
11
  * - Returns null for invalid input.
12
12
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
13
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
14
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
15
+ * offset's seconds (under a minute) of the last instant Temporal supports
16
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
17
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
18
+ * such limit.
13
19
  *
14
20
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
21
  * @param unit Temporal.DateUnit | Temporal.TimeUnit to specify the start
@@ -24,6 +30,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
24
30
  * @example startOfUnix(1706780800, "days", { epochUnit: "second" }) // 1706745600 (plural unit, singular epochUnit, UTC by default)
25
31
  * @example startOfUnix(1706659200000, "quarter") // null (use startOfQuarterForUnix)
26
32
  * @example startOfUnix(NaN, "day") // null
33
+ * @example startOfUnix(45870000, "day", { timeZone: "-00:44:30" }) // 2670000 (local midnight at a stored offset with seconds)
27
34
  */
28
35
  export declare function startOfUnix(value: number | string, unit: Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>, options?: {
29
36
  /**
@@ -34,8 +41,10 @@ export declare function startOfUnix(value: number | string, unit: Temporal.DateT
34
41
  */
35
42
  epochUnit?: UnixUnit;
36
43
  /**
37
- * The time zone the unit boundaries are found in: an IANA name, a UTC offset, or `"local"` for
38
- * the system time zone. An unknown zone returns `null`.
44
+ * The time zone the unit boundaries are found in: an IANA name, a UTC offset (a time zone
45
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
46
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
47
+ * `null`.
39
48
  *
40
49
  * @defaultValue `"UTC"`
41
50
  */
@@ -12,6 +12,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
12
12
  * takes neither. Those ignored options were removed in 1.16.0.
13
13
  * - Returns null for invalid input.
14
14
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
15
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
16
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
17
+ * offset's seconds (under a minute) of the last instant Temporal supports
18
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
19
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
20
+ * such limit.
15
21
  *
16
22
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
17
23
  * @param unit Temporal.DateUnit | Temporal.TimeUnit to specify the start
@@ -26,6 +32,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
26
32
  * @example startOfUnix(1706780800, "days", { epochUnit: "second" }) // 1706745600 (plural unit, singular epochUnit, UTC by default)
27
33
  * @example startOfUnix(1706659200000, "quarter") // null (use startOfQuarterForUnix)
28
34
  * @example startOfUnix(NaN, "day") // null
35
+ * @example startOfUnix(45870000, "day", { timeZone: "-00:44:30" }) // 2670000 (local midnight at a stored offset with seconds)
29
36
  */
30
37
  export function startOfUnix(value, unit, options) {
31
38
  try {
@@ -7,6 +7,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
7
7
  * - Validates duration units and values.
8
8
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
9
9
  * - Returns null for invalid input.
10
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
11
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
12
+ * offset's seconds (under a minute) of the last instant Temporal supports
13
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
14
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
15
+ * such limit.
10
16
  *
11
17
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
12
18
  * @param units Partial<Record<DateTimeDurationUnit, number>> object specifying units to subtract
@@ -29,8 +35,10 @@ export declare function subtractUnix(value: number | string, units: Partial<Reco
29
35
  */
30
36
  epochUnit?: UnixUnit;
31
37
  /**
32
- * The time zone the calendar arithmetic runs in: an IANA name, a UTC offset, or `"local"` for
33
- * the system time zone. An unknown zone returns `null`.
38
+ * The time zone the calendar arithmetic runs in: an IANA name, a UTC offset (a time zone
39
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
40
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
41
+ * `null`.
34
42
  *
35
43
  * @defaultValue `"UTC"`
36
44
  */