@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.
- package/README.md +55 -2920
- package/dist/calendar/calculate/bucketRange.d.ts +10 -2
- package/dist/calendar/calculate/bucketRange.js +18 -61
- package/dist/calendar/calculate/floorToZone.d.ts +10 -2
- package/dist/calendar/calculate/floorToZone.js +15 -7
- package/dist/calendar/hours/addOperatingTime.d.ts +6 -0
- package/dist/calendar/hours/addOperatingTime.js +7 -1
- package/dist/calendar/hours/isOpenAt.d.ts +6 -0
- package/dist/calendar/hours/isOpenAt.js +6 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +6 -0
- package/dist/calendar/hours/nextCloseAt.js +7 -1
- package/dist/calendar/hours/nextOpenAt.d.ts +6 -0
- package/dist/calendar/hours/nextOpenAt.js +7 -1
- package/dist/calendar/hours/operatingIntervals.d.ts +5 -0
- package/dist/calendar/hours/operatingIntervals.js +5 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +5 -0
- package/dist/calendar/hours/operatingTimeBetween.js +5 -0
- package/dist/calendar/hours/recurringWindows.d.ts +8 -1
- package/dist/calendar/hours/recurringWindows.js +12 -4
- package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
- package/dist/duration/calculate/durationFromUnits.js +67 -0
- package/dist/duration/calculate/getDurationUnit.d.ts +2 -2
- package/dist/duration/calculate/getDurationUnit.js +2 -2
- package/dist/duration/calculate/index.d.ts +3 -1
- package/dist/duration/calculate/index.js +3 -1
- package/dist/duration/calculate/negateDuration.d.ts +1 -1
- package/dist/duration/calculate/negateDuration.js +1 -1
- package/dist/duration/calculate/{durationAs.d.ts → totalDuration.d.ts} +25 -19
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +25 -19
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +1 -1
- package/dist/duration/compare/compareDurations.js +1 -1
- package/dist/duty/calculate/dutyDayFor.d.ts +38 -0
- package/dist/duty/calculate/dutyDayFor.js +71 -0
- package/dist/duty/calculate/dutyTotals.d.ts +24 -0
- package/dist/duty/calculate/dutyTotals.js +41 -0
- package/dist/duty/calculate/dutyViolations.d.ts +74 -0
- package/dist/duty/calculate/dutyViolations.js +65 -0
- package/dist/duty/calculate/evaluateDutyLog.d.ts +77 -0
- package/dist/duty/calculate/evaluateDutyLog.js +75 -0
- package/dist/duty/calculate/index.d.ts +7 -0
- package/dist/duty/calculate/index.js +7 -0
- package/dist/duty/calculate/longestRun.d.ts +28 -0
- package/dist/duty/calculate/longestRun.js +54 -0
- package/dist/duty/calculate/qualifyingRestPairs.d.ts +37 -0
- package/dist/duty/calculate/qualifyingRestPairs.js +58 -0
- package/dist/duty/calculate/qualifyingRests.d.ts +27 -0
- package/dist/duty/calculate/qualifyingRests.js +49 -0
- package/dist/duty/index.d.ts +3 -0
- package/dist/duty/index.js +4 -0
- package/dist/duty/validate/index.d.ts +1 -0
- package/dist/duty/validate/index.js +1 -0
- package/dist/duty/validate/isValidDutyLog.d.ts +24 -0
- package/dist/duty/validate/isValidDutyLog.js +34 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/instant/convert/classifyLocal.d.ts +5 -1
- package/dist/instant/convert/classifyLocal.js +16 -6
- package/dist/instant/convert/fromOffsetInstant.d.ts +4 -0
- package/dist/instant/convert/fromOffsetInstant.js +6 -1
- package/dist/instant/convert/resolveLocal.d.ts +7 -2
- package/dist/instant/convert/resolveLocal.js +16 -8
- package/dist/instant/convert/toOffsetInstant.d.ts +12 -8
- package/dist/instant/convert/toOffsetInstant.js +19 -11
- package/dist/instant/index.d.ts +1 -0
- package/dist/instant/index.js +1 -0
- package/dist/instant/validate/index.d.ts +1 -0
- package/dist/instant/validate/index.js +1 -0
- package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
- package/dist/instant/validate/isValidUtcOffset.js +35 -0
- package/dist/intermodal/calculate/chargeableDays.d.ts +6 -0
- package/dist/intermodal/calculate/chargeableDays.js +12 -4
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +7 -0
- package/dist/intermodal/calculate/freeTimeExpiry.js +15 -4
- package/dist/intermodal/calculate/index.d.ts +1 -0
- package/dist/intermodal/calculate/index.js +1 -0
- package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
- package/dist/intermodal/calculate/multimodalETA.js +145 -0
- package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
- package/dist/intermodal/format/bolTimestamp.js +78 -0
- package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
- package/dist/intermodal/format/formatEdifactDate.js +42 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
- package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
- package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
- package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
- package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
- package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
- package/dist/intermodal/format/formatEdifactTime.js +43 -0
- package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
- package/dist/intermodal/format/formatEpcisEvent.js +79 -0
- package/dist/intermodal/format/formatX12Date.d.ts +35 -0
- package/dist/intermodal/format/formatX12Date.js +43 -0
- package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
- package/dist/intermodal/format/formatX12DateRange.js +45 -0
- package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
- package/dist/intermodal/format/formatX12DateTime.js +47 -0
- package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
- package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
- package/dist/intermodal/format/formatX12Time.d.ts +42 -0
- package/dist/intermodal/format/formatX12Time.js +50 -0
- package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
- package/dist/intermodal/format/formatX12TimeElement.js +54 -0
- package/dist/intermodal/format/index.d.ts +14 -0
- package/dist/intermodal/format/index.js +14 -0
- package/dist/intermodal/index.d.ts +3 -0
- package/dist/intermodal/index.js +3 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
- package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
- package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
- package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
- package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
- package/dist/intermodal/parse/index.d.ts +18 -0
- package/dist/intermodal/parse/index.js +18 -0
- package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactDate.js +45 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
- package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
- package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
- package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
- package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
- package/dist/intermodal/parse/parseEdifactTime.js +45 -0
- package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
- package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
- package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
- package/dist/intermodal/parse/parseX12Date.js +47 -0
- package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
- package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
- package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
- package/dist/intermodal/parse/parseX12DateRange.js +52 -0
- package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
- package/dist/intermodal/parse/parseX12DateTime.js +53 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
- package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
- package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
- package/dist/intermodal/parse/parseX12Time.js +77 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
- package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
- package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
- package/dist/intermodal/validate/index.d.ts +18 -0
- package/dist/intermodal/validate/index.js +18 -0
- package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
- package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
- package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
- package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
- package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
- package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
- package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
- package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
- package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
- package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
- package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
- package/dist/intermodal/validate/isValidX12Date.js +30 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
- package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
- package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
- package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
- package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
- package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
- package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
- package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
- package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12Time.js +40 -0
- package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
- package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
- package/dist/internal/businessCalendar.js +4 -9
- package/dist/internal/dutyEngine.d.ts +125 -0
- package/dist/internal/dutyEngine.js +1746 -0
- package/dist/internal/dutyLog.d.ts +27 -0
- package/dist/internal/dutyLog.js +47 -0
- package/dist/internal/dutyPeriods.d.ts +135 -0
- package/dist/internal/dutyPeriods.js +369 -0
- package/dist/internal/dutyRules.d.ts +197 -0
- package/dist/internal/dutyRules.js +484 -0
- package/dist/internal/ediDateTimeFields.d.ts +97 -0
- package/dist/internal/ediDateTimeFields.js +288 -0
- package/dist/internal/ediDateTimeWriter.d.ts +92 -0
- package/dist/internal/ediDateTimeWriter.js +298 -0
- package/dist/internal/ediGrammar.d.ts +158 -0
- package/dist/internal/ediGrammar.js +384 -0
- package/dist/internal/englishCalendarNames.d.ts +3 -1
- package/dist/internal/englishCalendarNames.js +3 -1
- package/dist/internal/freeTimeLedger.d.ts +5 -0
- package/dist/internal/freeTimeLedger.js +11 -2
- package/dist/internal/index.d.ts +5 -2
- package/dist/internal/index.js +9 -2
- package/dist/internal/intervalNanoseconds.js +2 -1
- package/dist/internal/isObject.d.ts +13 -6
- package/dist/internal/isObject.js +14 -7
- package/dist/internal/isoYearString.d.ts +21 -0
- package/dist/internal/isoYearString.js +27 -0
- package/dist/internal/maxPieces.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +4 -1
- package/dist/internal/normalizeTimeZone.js +4 -1
- package/dist/internal/operatingSchedule.d.ts +13 -4
- package/dist/internal/operatingSchedule.js +146 -58
- package/dist/internal/patternToken.d.ts +10 -3
- package/dist/internal/patternToken.js +31 -12
- package/dist/internal/readDurationUnits.d.ts +34 -0
- package/dist/internal/readDurationUnits.js +78 -0
- package/dist/internal/readSetFields.d.ts +50 -0
- package/dist/internal/readSetFields.js +179 -0
- package/dist/internal/resolveRelativeUnit.d.ts +1 -1
- package/dist/internal/resolveRelativeUnit.js +1 -1
- package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/startOrEndOfUnix.d.ts +2 -1
- package/dist/internal/startOrEndOfUnix.js +9 -6
- package/dist/internal/twoDigitYear.d.ts +19 -0
- package/dist/internal/twoDigitYear.js +22 -0
- package/dist/internal/unixEpochValue.js +3 -2
- package/dist/internal/unixWallClock.d.ts +24 -0
- package/dist/internal/unixWallClock.js +35 -0
- package/dist/internal/utcWallClock.d.ts +20 -0
- package/dist/internal/utcWallClock.js +32 -0
- package/dist/internal/yearWindowStart.d.ts +28 -0
- package/dist/internal/yearWindowStart.js +52 -0
- package/dist/internal/zoneBucketCap.d.ts +18 -0
- package/dist/internal/zoneBucketCap.js +64 -0
- package/dist/internal/zoneFrame.d.ts +180 -0
- package/dist/internal/zoneFrame.js +221 -0
- package/dist/internal/zonedNowUnitValue.d.ts +7 -4
- package/dist/internal/zonedNowUnitValue.js +8 -4
- package/dist/internal/zonedWallClockDifference.js +4 -4
- package/dist/internal/zonedWallClockOperations.d.ts +5 -2
- package/dist/internal/zonedWallClockOperations.js +7 -10
- package/dist/plain/calculate/addDate.js +4 -7
- package/dist/plain/calculate/addDateTime.js +4 -7
- package/dist/plain/calculate/addTime.js +4 -7
- package/dist/plain/calculate/endOfTime.d.ts +1 -1
- package/dist/plain/calculate/setDate.d.ts +20 -3
- package/dist/plain/calculate/setDate.js +27 -7
- package/dist/plain/calculate/setDateTime.d.ts +15 -3
- package/dist/plain/calculate/setDateTime.js +22 -7
- package/dist/plain/calculate/setTime.d.ts +13 -1
- package/dist/plain/calculate/setTime.js +21 -6
- package/dist/plain/calculate/startOfTime.d.ts +1 -1
- package/dist/plain/calculate/subtractDate.js +4 -7
- package/dist/plain/calculate/subtractDateTime.js +4 -7
- package/dist/plain/calculate/subtractTime.js +4 -7
- package/dist/plain/format/formatCalendar.js +2 -1
- package/dist/plain/format/formatRelativeDate.js +2 -1
- package/dist/plain/format/formatRelativeDateTime.js +2 -1
- package/dist/plain/format/formatRelativeTime.js +2 -1
- package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
- package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +7 -7
- package/dist/plain/format/index.d.ts +1 -1
- package/dist/plain/format/index.js +1 -1
- package/dist/plain/get/getNowUnit.d.ts +2 -0
- package/dist/plain/get/getNowUnit.js +2 -0
- package/dist/plain/get/getYear.d.ts +2 -0
- package/dist/plain/get/getYear.js +4 -3
- package/dist/plain/interval/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
- package/dist/plain/interval/intervalXorAllTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsTime.js +2 -2
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +16 -3
- package/dist/plain/parse/parseDateTimeWithPattern.js +20 -5
- package/dist/plain/parse/parseDateWithPattern.d.ts +17 -3
- package/dist/plain/parse/parseDateWithPattern.js +21 -5
- package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
- package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +8 -8
- package/dist/plain/parse/parseTimeWithPattern.js +1 -0
- package/dist/plain/parse/parseUnitFromDate.d.ts +3 -0
- package/dist/plain/parse/parseUnitFromDate.js +5 -1
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +3 -0
- package/dist/plain/parse/parseUnitFromDateTime.js +5 -1
- package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
- package/dist/plain/parse/parseYearFromDate.js +7 -3
- package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
- package/dist/plain/parse/parseYearFromDateTime.js +6 -3
- package/dist/plain/validate/index.d.ts +1 -0
- package/dist/plain/validate/index.js +1 -0
- package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
- package/dist/precision/convert/fromNanoseconds.js +9 -3
- package/dist/regex/epcis.d.ts +60 -0
- package/dist/regex/epcis.js +60 -0
- package/dist/regex/http-date.d.ts +6 -4
- package/dist/regex/http-date.js +6 -4
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +1 -0
- package/dist/regex/rfc-2822.d.ts +2 -0
- package/dist/regex/rfc-2822.js +2 -0
- package/dist/regex/rfc-3339.d.ts +3 -1
- package/dist/regex/rfc-3339.js +3 -1
- package/dist/regex/sql-date-time.d.ts +2 -1
- package/dist/regex/sql-date-time.js +2 -1
- package/dist/regex/time-zone-like.d.ts +3 -2
- package/dist/regex/time-zone-like.js +3 -2
- package/dist/regex/utc-offset.d.ts +2 -1
- package/dist/regex/utc-offset.js +2 -1
- package/dist/transport/calculate/crossingTime.d.ts +6 -1
- package/dist/transport/calculate/crossingTime.js +6 -1
- package/dist/transport/calculate/cutoffAt.d.ts +6 -1
- package/dist/transport/calculate/cutoffAt.js +2 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +6 -1
- package/dist/transport/calculate/cutoffSchedule.js +2 -0
- package/dist/transport/calculate/dwellTime.d.ts +6 -1
- package/dist/transport/calculate/dwellTime.js +6 -1
- package/dist/transport/calculate/scheduleDelivery.d.ts +13 -5
- package/dist/transport/calculate/scheduleDelivery.js +6 -1
- package/dist/transport/convert/etaAtZone.d.ts +6 -1
- package/dist/transport/convert/etaAtZone.js +6 -1
- package/dist/types/business-calendar.d.ts +5 -4
- package/dist/types/duty.d.ts +777 -0
- package/dist/types/duty.js +0 -0
- package/dist/types/edi.d.ts +407 -0
- package/dist/types/edi.js +0 -0
- package/dist/types/epcis.d.ts +25 -0
- package/dist/types/epcis.js +0 -0
- package/dist/types/exact-duration-unit.d.ts +8 -0
- package/dist/types/exact-duration-unit.js +0 -0
- package/dist/types/free-time-options.d.ts +4 -3
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types/operating-schedule.d.ts +3 -2
- package/dist/types/two-digit-year.d.ts +23 -0
- package/dist/types/two-digit-year.js +0 -0
- package/dist/types/zone-bucket-unit.d.ts +1 -1
- package/dist/unix/calculate/addUnix.d.ts +11 -2
- package/dist/unix/calculate/addUnix.js +14 -11
- package/dist/unix/calculate/diffUnix.d.ts +10 -2
- package/dist/unix/calculate/diffUnix.js +11 -6
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +10 -2
- package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/endOfUnix.d.ts +11 -2
- package/dist/unix/calculate/endOfUnix.js +7 -0
- package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
- package/dist/unix/calculate/isBetweenUnix.js +3 -3
- package/dist/unix/calculate/roundUnix.d.ts +10 -2
- package/dist/unix/calculate/roundUnix.js +13 -6
- package/dist/unix/calculate/setUnix.d.ts +25 -5
- package/dist/unix/calculate/setUnix.js +33 -12
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
- package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
- package/dist/unix/calculate/startOfUnix.d.ts +11 -2
- package/dist/unix/calculate/startOfUnix.js +7 -0
- package/dist/unix/calculate/subtractUnix.d.ts +10 -2
- package/dist/unix/calculate/subtractUnix.js +13 -11
- package/dist/unix/compare/areUnixEqualBy.d.ts +11 -2
- package/dist/unix/compare/areUnixEqualBy.js +7 -0
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +5 -2
- package/dist/unix/convert/convertUnixToPlainTime.js +5 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +5 -1
- package/dist/unix/convert/convertUnixToZoned.js +5 -1
- package/dist/unix/format/formatCalendarUnix.d.ts +6 -2
- package/dist/unix/format/formatCalendarUnix.js +6 -1
- package/dist/unix/format/formatRelativeUnix.d.ts +11 -3
- package/dist/unix/format/formatRelativeUnix.js +13 -5
- package/dist/unix/format/formatUnix.d.ts +7 -2
- package/dist/unix/format/formatUnix.js +4 -0
- package/dist/unix/get/getUnixDay.d.ts +1 -3
- package/dist/unix/get/getUnixDay.js +5 -12
- package/dist/unix/get/getUnixHour.d.ts +1 -3
- package/dist/unix/get/getUnixHour.js +5 -12
- package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
- package/dist/unix/get/getUnixMicrosecond.js +4 -11
- package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
- package/dist/unix/get/getUnixMillisecond.js +5 -12
- package/dist/unix/get/getUnixMinute.d.ts +1 -3
- package/dist/unix/get/getUnixMinute.js +5 -12
- package/dist/unix/get/getUnixMonth.d.ts +1 -3
- package/dist/unix/get/getUnixMonth.js +5 -12
- package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
- package/dist/unix/get/getUnixNanosecond.js +4 -11
- package/dist/unix/get/getUnixNowUnit.d.ts +2 -0
- package/dist/unix/get/getUnixNowUnit.js +2 -0
- package/dist/unix/get/getUnixSecond.d.ts +1 -3
- package/dist/unix/get/getUnixSecond.js +5 -12
- package/dist/unix/get/getUnixYear.d.ts +3 -3
- package/dist/unix/get/getUnixYear.js +5 -12
- package/dist/unix/interval/intervalCountUnix.d.ts +11 -2
- package/dist/unix/interval/intervalCountUnix.js +7 -0
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
- package/dist/unix/interval/intervalFromDurationUnix.js +12 -7
- package/dist/unix/interval/intervalLengthUnix.d.ts +10 -2
- package/dist/unix/interval/intervalLengthUnix.js +6 -0
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +10 -2
- package/dist/unix/interval/splitIntervalByUnitUnix.js +12 -6
- package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDateFromUnix.js +3 -3
- package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
- package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
- package/dist/unix/parse/parseTimeFromUnix.js +4 -3
- package/dist/unix/parse/parseUnitFromUnix.d.ts +9 -3
- package/dist/unix/parse/parseUnitFromUnix.js +21 -14
- package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
- package/dist/unix/parse/parseWeekFromUnix.js +4 -4
- package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
- package/dist/unix/parse/parseYearFromUnix.js +4 -1
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.js +4 -7
- package/dist/utc/calculate/setUtc.d.ts +16 -3
- package/dist/utc/calculate/setUtc.js +22 -8
- package/dist/utc/calculate/subtractUtc.js +4 -7
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -2
- package/dist/utc/convert/convertUtcToPlainDate.js +10 -7
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +9 -2
- package/dist/utc/convert/convertUtcToPlainDateTime.js +12 -13
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +5 -2
- package/dist/utc/convert/convertUtcToPlainTime.js +7 -6
- package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
- package/dist/utc/convert/convertUtcToZoned.js +5 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +6 -2
- package/dist/utc/format/formatCalendarUtc.js +6 -1
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +7 -7
- package/dist/utc/format/formatRelativeUtc.d.ts +11 -3
- package/dist/utc/format/formatRelativeUtc.js +13 -5
- package/dist/utc/format/formatUtc.d.ts +7 -2
- package/dist/utc/format/formatUtc.js +4 -0
- package/dist/utc/format/index.d.ts +1 -1
- package/dist/utc/format/index.js +1 -1
- package/dist/utc/get/getUtcDay.d.ts +1 -3
- package/dist/utc/get/getUtcDay.js +5 -12
- package/dist/utc/get/getUtcHour.d.ts +1 -3
- package/dist/utc/get/getUtcHour.js +5 -12
- package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
- package/dist/utc/get/getUtcMicrosecond.js +4 -11
- package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
- package/dist/utc/get/getUtcMillisecond.js +5 -12
- package/dist/utc/get/getUtcMinute.d.ts +1 -3
- package/dist/utc/get/getUtcMinute.js +5 -12
- package/dist/utc/get/getUtcMonth.d.ts +1 -3
- package/dist/utc/get/getUtcMonth.js +5 -12
- package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
- package/dist/utc/get/getUtcNanosecond.js +4 -11
- package/dist/utc/get/getUtcNow.d.ts +1 -3
- package/dist/utc/get/getUtcNow.js +2 -9
- package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
- package/dist/utc/get/getUtcNowUnit.js +2 -0
- package/dist/utc/get/getUtcSecond.d.ts +1 -3
- package/dist/utc/get/getUtcSecond.js +5 -12
- package/dist/utc/get/getUtcYear.d.ts +3 -3
- package/dist/utc/get/getUtcYear.js +5 -12
- package/dist/utc/interval/intervalXorAllUtc.js +2 -2
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDateFromUtc.js +2 -2
- package/dist/utc/parse/parseDayFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDayFromUtc.js +2 -2
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -4
- package/dist/utc/parse/parseHourFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseHourFromUtc.js +2 -2
- package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
- package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +12 -12
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMicrosecondFromUtc.js +2 -2
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMillisecondFromUtc.js +2 -2
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
- package/dist/utc/parse/parseMonthFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseMonthFromUtc.js +2 -2
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseNanosecondFromUtc.js +2 -2
- package/dist/utc/parse/parseSecondFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseSecondFromUtc.js +2 -2
- package/dist/utc/parse/parseTimeFromUtc.d.ts +5 -2
- package/dist/utc/parse/parseTimeFromUtc.js +5 -4
- package/dist/utc/parse/parseUnitFromUtc.d.ts +10 -3
- package/dist/utc/parse/parseUnitFromUtc.js +11 -5
- package/dist/utc/parse/parseWeekFromUtc.d.ts +4 -2
- package/dist/utc/parse/parseWeekFromUtc.js +4 -4
- package/dist/utc/parse/parseYearFromUtc.d.ts +8 -4
- package/dist/utc/parse/parseYearFromUtc.js +8 -5
- package/dist/utc/validate/index.d.ts +2 -0
- package/dist/utc/validate/index.js +2 -0
- package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
- package/dist/utc/validate/isValidHttpDate.js +38 -0
- package/dist/utc/validate/isValidUtc.d.ts +4 -0
- package/dist/utc/validate/isValidUtc.js +4 -0
- package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/zoned/calculate/addZoned.js +4 -7
- package/dist/zoned/calculate/setZoned.d.ts +19 -5
- package/dist/zoned/calculate/setZoned.js +26 -9
- package/dist/zoned/calculate/subtractZoned.js +4 -7
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +4 -1
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +4 -1
- package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
- package/dist/zoned/convert/convertZonedToZoned.js +5 -1
- package/dist/zoned/format/formatCalendarZoned.js +2 -1
- package/dist/zoned/format/formatRelativeZoned.js +2 -1
- package/dist/zoned/format/formatTimeZoneName.d.ts +5 -1
- package/dist/zoned/format/formatTimeZoneName.js +5 -1
- package/dist/zoned/get/getDstTransitions.d.ts +5 -3
- package/dist/zoned/get/getDstTransitions.js +12 -7
- package/dist/zoned/get/getSystemTimeZone.d.ts +3 -1
- package/dist/zoned/get/getSystemTimeZone.js +5 -2
- package/dist/zoned/get/getTimeZoneOffset.d.ts +10 -2
- package/dist/zoned/get/getTimeZoneOffset.js +18 -5
- package/dist/zoned/get/getZonedDay.d.ts +2 -1
- package/dist/zoned/get/getZonedDay.js +6 -7
- package/dist/zoned/get/getZonedDayOfWeek.d.ts +2 -1
- package/dist/zoned/get/getZonedDayOfWeek.js +6 -5
- package/dist/zoned/get/getZonedHour.d.ts +2 -1
- package/dist/zoned/get/getZonedHour.js +6 -7
- package/dist/zoned/get/getZonedMicrosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMicrosecond.js +6 -5
- package/dist/zoned/get/getZonedMillisecond.d.ts +2 -1
- package/dist/zoned/get/getZonedMillisecond.js +6 -7
- package/dist/zoned/get/getZonedMinute.d.ts +2 -1
- package/dist/zoned/get/getZonedMinute.js +6 -7
- package/dist/zoned/get/getZonedMonth.d.ts +2 -1
- package/dist/zoned/get/getZonedMonth.js +6 -7
- package/dist/zoned/get/getZonedNanosecond.d.ts +2 -1
- package/dist/zoned/get/getZonedNanosecond.js +6 -5
- package/dist/zoned/get/getZonedNow.d.ts +5 -1
- package/dist/zoned/get/getZonedNow.js +5 -1
- package/dist/zoned/get/getZonedNowUnit.d.ts +6 -3
- package/dist/zoned/get/getZonedNowUnit.js +10 -7
- package/dist/zoned/get/getZonedSecond.d.ts +2 -1
- package/dist/zoned/get/getZonedSecond.js +6 -7
- package/dist/zoned/get/getZonedToday.d.ts +2 -1
- package/dist/zoned/get/getZonedToday.js +6 -5
- package/dist/zoned/get/getZonedWeekOfYear.d.ts +2 -1
- package/dist/zoned/get/getZonedWeekOfYear.js +6 -5
- package/dist/zoned/get/getZonedYear.d.ts +4 -1
- package/dist/zoned/get/getZonedYear.js +9 -7
- package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
- package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +4 -1
- package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +4 -2
- package/dist/zoned/validate/hasDaylightSaving.js +13 -7
- package/dist/zoned/validate/index.d.ts +2 -0
- package/dist/zoned/validate/index.js +2 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
- package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
- package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
- package/dist/zoned/validate/isValidTimeZone.d.ts +5 -1
- package/dist/zoned/validate/isValidTimeZone.js +6 -2
- package/package.json +50 -1
- package/skills/gmt-arithmetic/SKILL.md +99 -12
- package/skills/gmt-basics/SKILL.md +57 -15
- package/skills/gmt-integration/SKILL.md +24 -9
- package/skills/gmt-timezone/SKILL.md +134 -29
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -19
- 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
|
|
62
|
-
*
|
|
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
|
|
64
|
-
if (
|
|
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
|
|
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
|
|
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
|
|
50
|
-
*
|
|
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
|
|
50
|
-
if (
|
|
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
|
|
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
|
|
32
|
-
*
|
|
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
|
|
38
|
-
*
|
|
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
|
|
32
|
-
*
|
|
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 {
|
|
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
|
|
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 (
|
|
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
|
|
64
|
-
*
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
14
|
-
*
|
|
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
|
|
40
|
-
*
|
|
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
|
|
16
|
-
*
|
|
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
|
|
39
|
-
if (
|
|
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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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,
|
|
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
|
|
33
|
-
*
|
|
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
|
|
38
|
-
*
|
|
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
|
|
33
|
-
*
|
|
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
|
*/
|