@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
|
@@ -10,10 +10,23 @@ import type { Disambiguation, Offset, Overflow } from "../../types/index.js";
|
|
|
10
10
|
* equivalent to `.with()`'s, because Temporal's `ZonedDateTime.prototype.add()` doesn't accept
|
|
11
11
|
* `disambiguation`/`offset` at all.
|
|
12
12
|
* - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
|
|
13
|
-
* `millisecond`, `microsecond
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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 "", where Temporal would convert or
|
|
17
|
+
* truncate it. A bigint, `NaN` or an infinity returns "" 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
|
+
* "".
|
|
20
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". 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 "", as Temporal's `with` refuses one. One whose
|
|
25
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
26
|
+
* nothing instead.
|
|
27
|
+
* - `calendar`, `timeZone`, and `offset` are deliberately excluded from `fields` — this function
|
|
28
|
+
* only sets date/time components, never the zone or calendar identity, and `offset` is
|
|
29
|
+
* controlled separately via `options.offset`.
|
|
17
30
|
* - **Compatibility:** before 1.16.0 `offset` defaulted to `"ignore"`. Pass `{ offset: "ignore" }`
|
|
18
31
|
* to keep that resolution.
|
|
19
32
|
* - Returns "" for invalid input.
|
|
@@ -29,9 +42,10 @@ import type { Disambiguation, Offset, Overflow } from "../../types/index.js";
|
|
|
29
42
|
* @example setZoned("2024-03-10T12:00:00-04:00[America/New_York]", {}) // "2024-03-10T12:00:00-04:00[America/New_York]" (empty fields object is a no-op)
|
|
30
43
|
* @example setZoned("2024-11-03T01:45:00-05:00[America/New_York]", { minute: 0 }, { disambiguation: "reject" }) // "2024-11-03T01:00:00-05:00[America/New_York]" (offset defaults to "prefer": the source's -05:00 is still valid, so it is kept and "reject" never fires)
|
|
31
44
|
* @example setZoned("2024-11-03T01:45:00-05:00[America/New_York]", { minute: 0 }, { disambiguation: "reject", offset: "ignore" }) // "" (offset "ignore" re-resolves the repeated 01:00, and "reject" throws)
|
|
45
|
+
* @example setZoned("2024-03-10T12:00:00-04:00[America/New_York]", { hour: "9" }) // "" (not converted)
|
|
32
46
|
* @example setZoned("invalid", { hour: 9 }) // ""
|
|
33
47
|
*/
|
|
34
|
-
export declare function setZoned(value: string, fields: Omit<Temporal.ZonedDateTimeLike, "calendar" | "timeZone" | "offset">, options?: {
|
|
48
|
+
export declare function setZoned(value: string, fields: Omit<Temporal.ZonedDateTimeLike, "calendar" | "timeZone" | "offset" | "era" | "eraYear">, options?: {
|
|
35
49
|
/**
|
|
36
50
|
* What happens when the result names a day its month does not have, such as setting `month: 2`
|
|
37
51
|
* on 31 January. `"constrain"` clamps to the last valid day; `"reject"` returns `""`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { resolveOverflow, withZonedFields, zonedDateTimeFrom, } from "../../internal/index.js";
|
|
2
|
+
import { DATE_TIME_FIELDS, readSetFields, resolveOverflow, withZonedFields, zonedDateTimeFrom, } from "../../internal/index.js";
|
|
3
3
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
@@ -13,10 +13,23 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
|
13
13
|
* equivalent to `.with()`'s, because Temporal's `ZonedDateTime.prototype.add()` doesn't accept
|
|
14
14
|
* `disambiguation`/`offset` at all.
|
|
15
15
|
* - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
|
|
16
|
-
* `millisecond`, `microsecond
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* `millisecond`, `microsecond` and/or `nanosecond`; omitted fields keep their current value. An
|
|
17
|
+
* object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
|
|
18
|
+
* - Values are not converted: `monthCode` must be a string and every other field an integer number.
|
|
19
|
+
* `null`, a numeric string, a boolean or a fraction returns "", where Temporal would convert or
|
|
20
|
+
* truncate it. A bigint, `NaN` or an infinity returns "" too. A number too large for its
|
|
21
|
+
* field follows `overflow`. A month or day below 1, or a date outside Temporal's range, returns
|
|
22
|
+
* "".
|
|
23
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". So does an
|
|
24
|
+
* era, an `offset`, or a `calendar` or `timeZone` property, whether own, inherited or a getter. A
|
|
25
|
+
* field is read with a property get, as Temporal reads it, so an inherited or getter field is
|
|
26
|
+
* set.
|
|
27
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
28
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
29
|
+
* nothing instead.
|
|
30
|
+
* - `calendar`, `timeZone`, and `offset` are deliberately excluded from `fields` — this function
|
|
31
|
+
* only sets date/time components, never the zone or calendar identity, and `offset` is
|
|
32
|
+
* controlled separately via `options.offset`.
|
|
20
33
|
* - **Compatibility:** before 1.16.0 `offset` defaulted to `"ignore"`. Pass `{ offset: "ignore" }`
|
|
21
34
|
* to keep that resolution.
|
|
22
35
|
* - Returns "" for invalid input.
|
|
@@ -32,6 +45,7 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
|
32
45
|
* @example setZoned("2024-03-10T12:00:00-04:00[America/New_York]", {}) // "2024-03-10T12:00:00-04:00[America/New_York]" (empty fields object is a no-op)
|
|
33
46
|
* @example setZoned("2024-11-03T01:45:00-05:00[America/New_York]", { minute: 0 }, { disambiguation: "reject" }) // "2024-11-03T01:00:00-05:00[America/New_York]" (offset defaults to "prefer": the source's -05:00 is still valid, so it is kept and "reject" never fires)
|
|
34
47
|
* @example setZoned("2024-11-03T01:45:00-05:00[America/New_York]", { minute: 0 }, { disambiguation: "reject", offset: "ignore" }) // "" (offset "ignore" re-resolves the repeated 01:00, and "reject" throws)
|
|
48
|
+
* @example setZoned("2024-03-10T12:00:00-04:00[America/New_York]", { hour: "9" }) // "" (not converted)
|
|
35
49
|
* @example setZoned("invalid", { hour: 9 }) // ""
|
|
36
50
|
*/
|
|
37
51
|
export function setZoned(value, fields, options) {
|
|
@@ -47,11 +61,14 @@ export function setZoned(value, fields, options) {
|
|
|
47
61
|
const offset = optionOrDefault(options?.offset, "prefer");
|
|
48
62
|
try {
|
|
49
63
|
const zoned = zonedDateTimeFrom(value);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
const set = readSetFields(fields, DATE_TIME_FIELDS);
|
|
65
|
+
if (set === null)
|
|
66
|
+
return "";
|
|
67
|
+
// Only the values readSetFields checked reach Temporal, on both paths of withZonedFields. An
|
|
68
|
+
// empty result sets nothing: a no-op here, where Temporal's with() would throw.
|
|
69
|
+
if (Object.keys(set).length === 0)
|
|
53
70
|
return zoned.toString();
|
|
54
|
-
return withZonedFields(zoned,
|
|
71
|
+
return withZonedFields(zoned, set, {
|
|
55
72
|
overflow,
|
|
56
73
|
disambiguation,
|
|
57
74
|
offset,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
|
-
import { addToZonedDisambiguated, calendarSystemOfZonedValue, formatZonedInCalendar,
|
|
2
|
+
import { addToZonedDisambiguated, calendarSystemOfZonedValue, formatZonedInCalendar, parseCalendarZonedValue, readDurationUnits, resolveOverflow, } from "../../internal/index.js";
|
|
3
3
|
import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
|
|
4
4
|
import { isValidCalendarZonedDateTime } from "../validate/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
@@ -58,11 +58,8 @@ export function subtractZoned(value, units, optionsArg) {
|
|
|
58
58
|
return "";
|
|
59
59
|
}
|
|
60
60
|
const validZonedDateTime = isValidCalendarZonedDateTime(value);
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
Object.keys(units).every(isValidDateTimeDurationUnit);
|
|
64
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
65
|
-
if (!validZonedDateTime || !validUnits || !validAmounts) {
|
|
61
|
+
const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
|
|
62
|
+
if (!validZonedDateTime || amounts === null) {
|
|
66
63
|
return "";
|
|
67
64
|
}
|
|
68
65
|
const disambiguation = optionOrDefault(optionsArg?.disambiguation, "compatible");
|
|
@@ -73,7 +70,7 @@ export function subtractZoned(value, units, optionsArg) {
|
|
|
73
70
|
return "";
|
|
74
71
|
}
|
|
75
72
|
const zoned = parseCalendarZonedValue(value);
|
|
76
|
-
const subtracted = addToZonedDisambiguated(zoned,
|
|
73
|
+
const subtracted = addToZonedDisambiguated(zoned, amounts, -1, {
|
|
77
74
|
overflow,
|
|
78
75
|
disambiguation,
|
|
79
76
|
});
|
|
@@ -9,9 +9,12 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
9
9
|
* - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
|
|
10
10
|
* dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
|
|
11
11
|
* - Returns "" for invalid input.
|
|
12
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
13
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call `resolveLocal` for the
|
|
14
|
+
* instant the wall time names at that offset.
|
|
12
15
|
*
|
|
13
16
|
* @param value plain datetime string (e.g. "2024-02-29T14:30:45")
|
|
14
|
-
* @param timeZone IANA name or UTC offset
|
|
17
|
+
* @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
15
18
|
* @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
|
|
16
19
|
* @returns zoned ISO 8601 datetime string or "" when invalid
|
|
17
20
|
*
|
|
@@ -13,9 +13,12 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
|
13
13
|
* - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
|
|
14
14
|
* dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
|
|
15
15
|
* - Returns "" for invalid input.
|
|
16
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
17
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call `resolveLocal` for the
|
|
18
|
+
* instant the wall time names at that offset.
|
|
16
19
|
*
|
|
17
20
|
* @param value plain datetime string (e.g. "2024-02-29T14:30:45")
|
|
18
|
-
* @param timeZone IANA name or UTC offset
|
|
21
|
+
* @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
19
22
|
* @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
|
|
20
23
|
* @returns zoned ISO 8601 datetime string or "" when invalid
|
|
21
24
|
*
|
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* - Uses Temporal.ZonedDateTime.withTimeZone to convert.
|
|
5
5
|
* - Returns "" for invalid input.
|
|
6
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
7
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call
|
|
8
|
+
* `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
|
|
9
|
+
* bracket.
|
|
6
10
|
*
|
|
7
11
|
* @param value zoned ISO 8601 datetime string
|
|
8
|
-
* @param timeZone target IANA name or UTC offset
|
|
12
|
+
* @param timeZone target IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
9
13
|
* @returns zoned ISO 8601 string in target timeZone or "" when invalid
|
|
10
14
|
*
|
|
11
15
|
* @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
|
|
@@ -5,9 +5,13 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
|
5
5
|
*
|
|
6
6
|
* - Uses Temporal.ZonedDateTime.withTimeZone to convert.
|
|
7
7
|
* - Returns "" for invalid input.
|
|
8
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
|
|
9
|
+
* 9557 §4.1), so the result could not name it. Pass the IANA name, or call
|
|
10
|
+
* `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
|
|
11
|
+
* bracket.
|
|
8
12
|
*
|
|
9
13
|
* @param value zoned ISO 8601 datetime string
|
|
10
|
-
* @param timeZone target IANA name or UTC offset
|
|
14
|
+
* @param timeZone target IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
11
15
|
* @returns zoned ISO 8601 string in target timeZone or "" when invalid
|
|
12
16
|
*
|
|
13
17
|
* @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
|
|
@@ -5,6 +5,7 @@ import { isValidUtc } from "../../utc/validate/index.js";
|
|
|
5
5
|
import { isValidZonedFormatReference } from "../../internal/zonedFormatReference.js";
|
|
6
6
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
7
7
|
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
8
|
+
import { isObject } from "../../internal/isObject.js";
|
|
8
9
|
/**
|
|
9
10
|
* Format a zoned date-time as a relative day label plus time-of-day, e.g.
|
|
10
11
|
* "Tomorrow at 2:30 PM" — the zoned counterpart of `formatCalendar`. See
|
|
@@ -29,7 +30,7 @@ export function formatCalendarZoned(value, locale, options = {}) {
|
|
|
29
30
|
try {
|
|
30
31
|
// Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
|
|
31
32
|
// invalid input.
|
|
32
|
-
if (options
|
|
33
|
+
if (!isObject(options))
|
|
33
34
|
return "";
|
|
34
35
|
if (!isValidZonedDateTime(value))
|
|
35
36
|
return "";
|
|
@@ -4,6 +4,7 @@ import { formatRelativeDuration } from "../../internal/formatRelativeDuration.js
|
|
|
4
4
|
import { isValidUtc } from "../../utc/validate/index.js";
|
|
5
5
|
import { isValidZonedFormatReference } from "../../internal/zonedFormatReference.js";
|
|
6
6
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
7
|
+
import { isObject } from "../../internal/isObject.js";
|
|
7
8
|
/**
|
|
8
9
|
* Format the relative time between a zoned date-time and a reference instant.
|
|
9
10
|
*
|
|
@@ -34,7 +35,7 @@ export function formatRelativeZoned(value, locale, options = {}) {
|
|
|
34
35
|
try {
|
|
35
36
|
// Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
|
|
36
37
|
// invalid input.
|
|
37
|
-
if (options
|
|
38
|
+
if (!isObject(options))
|
|
38
39
|
return "";
|
|
39
40
|
if (!isValidZonedDateTime(value))
|
|
40
41
|
return "";
|
|
@@ -47,8 +47,12 @@ export interface FormatTimeZoneNameOptions {
|
|
|
47
47
|
* issue — prefer them for a name that won't change twice a year.
|
|
48
48
|
* - Output depends on runtime ICU data.
|
|
49
49
|
* - Returns "" for an invalid timeZone or locale.
|
|
50
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
|
|
51
|
+
* identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
|
|
52
|
+
* `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
|
|
53
|
+
* Node, throw a RangeError exception"). Pass the IANA name.
|
|
50
54
|
*
|
|
51
|
-
* @param timeZone IANA name or UTC offset
|
|
55
|
+
* @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
52
56
|
* @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
|
|
53
57
|
* @param options optional setting for the form of the name
|
|
54
58
|
* @returns localized zone name, or "" on invalid input
|
|
@@ -20,8 +20,12 @@ import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
|
20
20
|
* issue — prefer them for a name that won't change twice a year.
|
|
21
21
|
* - Output depends on runtime ICU data.
|
|
22
22
|
* - Returns "" for an invalid timeZone or locale.
|
|
23
|
+
* - An offset with seconds (`-00:44:30`) returns `""`. `Intl.DateTimeFormat` takes a time zone
|
|
24
|
+
* identifier only: constructing one with an offset that has seconds throws (ECMA-402, the
|
|
25
|
+
* `DateTimeFormat` construction step "If parseResult contains more than one MinuteSecond Parse
|
|
26
|
+
* Node, throw a RangeError exception"). Pass the IANA name.
|
|
23
27
|
*
|
|
24
|
-
* @param timeZone IANA name or UTC offset
|
|
28
|
+
* @param timeZone IANA name or a UTC offset to the minute (what `isValidTimeZone` accepts)
|
|
25
29
|
* @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
|
|
26
30
|
* @param options optional setting for the form of the name
|
|
27
31
|
* @returns localized zone name, or "" on invalid input
|
|
@@ -35,10 +35,11 @@ export interface DstTransition {
|
|
|
35
35
|
* - Returns `[]` for an invalid timeZone, a non-integer year, or a valid zone
|
|
36
36
|
* with zero transitions in that year (not an error case), and when the scan
|
|
37
37
|
* exhausts its internal bound — never a partial list.
|
|
38
|
-
* - A UTC offset
|
|
39
|
-
*
|
|
38
|
+
* - A UTC offset, with or without seconds (`"+05:30"`, `"-00:44:30"`), never changes, so it has no
|
|
39
|
+
* transitions and returns `[]` for every year.
|
|
40
40
|
*
|
|
41
|
-
* @param timeZone IANA name or UTC offset
|
|
41
|
+
* @param timeZone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or a
|
|
42
|
+
* stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
42
43
|
* @param year calendar year to scan (must be an integer)
|
|
43
44
|
* @returns array of `{ instant, offsetBefore, offsetAfter }`, in chronological order
|
|
44
45
|
*
|
|
@@ -52,5 +53,6 @@ export interface DstTransition {
|
|
|
52
53
|
* @example getDstTransitions("Asia/Tokyo", 2024) // []
|
|
53
54
|
* @example getDstTransitions("+05:30", 2024) // [] (a fixed offset has no transitions)
|
|
54
55
|
* @example getDstTransitions("Invalid/Zone", 2024) // []
|
|
56
|
+
* @example getDstTransitions("-00:44:30", 1970) // [] (a fixed offset)
|
|
55
57
|
*/
|
|
56
58
|
export declare function getDstTransitions(timeZone: string, year: number): DstTransition[];
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { zonedDateTimeFrom, zonedNextTransition, zonedStartOfDay, } from "../../internal/index.js";
|
|
1
|
+
import { zonedDateTimeFrom, zonedNextTransition, zonedStartOfDay, zoneFrame, } from "../../internal/index.js";
|
|
3
2
|
const MAX_TRANSITIONS_PER_YEAR = 20;
|
|
4
3
|
/** 368 days: a 366-day year plus a day at each end for the zone's offset. */
|
|
5
4
|
const SEARCH_SPAN_NANOSECONDS = 368n * 86400000000000n;
|
|
@@ -20,10 +19,11 @@ const SEARCH_SPAN_NANOSECONDS = 368n * 86400000000000n;
|
|
|
20
19
|
* - Returns `[]` for an invalid timeZone, a non-integer year, or a valid zone
|
|
21
20
|
* with zero transitions in that year (not an error case), and when the scan
|
|
22
21
|
* exhausts its internal bound — never a partial list.
|
|
23
|
-
* - A UTC offset
|
|
24
|
-
*
|
|
22
|
+
* - A UTC offset, with or without seconds (`"+05:30"`, `"-00:44:30"`), never changes, so it has no
|
|
23
|
+
* transitions and returns `[]` for every year.
|
|
25
24
|
*
|
|
26
|
-
* @param timeZone IANA name or UTC offset
|
|
25
|
+
* @param timeZone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or a
|
|
26
|
+
* stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
27
27
|
* @param year calendar year to scan (must be an integer)
|
|
28
28
|
* @returns array of `{ instant, offsetBefore, offsetAfter }`, in chronological order
|
|
29
29
|
*
|
|
@@ -37,15 +37,20 @@ const SEARCH_SPAN_NANOSECONDS = 368n * 86400000000000n;
|
|
|
37
37
|
* @example getDstTransitions("Asia/Tokyo", 2024) // []
|
|
38
38
|
* @example getDstTransitions("+05:30", 2024) // [] (a fixed offset has no transitions)
|
|
39
39
|
* @example getDstTransitions("Invalid/Zone", 2024) // []
|
|
40
|
+
* @example getDstTransitions("-00:44:30", 1970) // [] (a fixed offset)
|
|
40
41
|
*/
|
|
41
42
|
export function getDstTransitions(timeZone, year) {
|
|
42
|
-
|
|
43
|
+
const frame = zoneFrame(timeZone);
|
|
44
|
+
// A stored offset with seconds is a fixed offset: it has no transitions, as "-00:45" has none.
|
|
45
|
+
if (frame === null ||
|
|
46
|
+
frame.shiftNanoseconds !== 0n ||
|
|
47
|
+
!Number.isInteger(year)) {
|
|
43
48
|
return [];
|
|
44
49
|
}
|
|
45
50
|
try {
|
|
46
51
|
// getTimeZoneTransition("next") is strictly after its receiver, so start 1ns before the
|
|
47
52
|
// year opens to catch a transition landing exactly on local January 1 00:00.
|
|
48
|
-
let cur = zonedStartOfDay(zonedDateTimeFrom({ year, month: 1, day: 1, timeZone })).subtract({ nanoseconds: 1 });
|
|
53
|
+
let cur = zonedStartOfDay(zonedDateTimeFrom({ year, month: 1, day: 1, timeZone: frame.timeZone })).subtract({ nanoseconds: 1 });
|
|
49
54
|
// A calendar year is at most 366 days and an offset is under a day, so no search needs to
|
|
50
55
|
// read past this.
|
|
51
56
|
const searchEnd = cur.epochNanoseconds + SEARCH_SPAN_NANOSECONDS;
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* Return the runtime system timeZone name (for example "America/New_York").
|
|
3
3
|
*
|
|
4
4
|
* - Uses Intl.DateTimeFormat().resolvedOptions().timeZone to get system timezone.
|
|
5
|
-
* - Returns "" when
|
|
5
|
+
* - Returns "" when the host reports no usable time zone. With an empty `TZ` the runtime reports
|
|
6
|
+
* ICU's placeholder `"Etc/Unknown"`, and with an unrecognised `TZ` it reports `undefined`;
|
|
7
|
+
* neither is a zone that Temporal or `Intl.DateTimeFormat` accepts.
|
|
6
8
|
*
|
|
7
9
|
* @returns system timeZone name or "" on failure
|
|
8
10
|
*
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { isValidTimeZone } from "../validate/isValidTimeZone.js";
|
|
1
2
|
/**
|
|
2
3
|
* Return the runtime system timeZone name (for example "America/New_York").
|
|
3
4
|
*
|
|
4
5
|
* - Uses Intl.DateTimeFormat().resolvedOptions().timeZone to get system timezone.
|
|
5
|
-
* - Returns "" when
|
|
6
|
+
* - Returns "" when the host reports no usable time zone. With an empty `TZ` the runtime reports
|
|
7
|
+
* ICU's placeholder `"Etc/Unknown"`, and with an unrecognised `TZ` it reports `undefined`;
|
|
8
|
+
* neither is a zone that Temporal or `Intl.DateTimeFormat` accepts.
|
|
6
9
|
*
|
|
7
10
|
* @returns system timeZone name or "" on failure
|
|
8
11
|
*
|
|
@@ -11,7 +14,7 @@
|
|
|
11
14
|
export function getSystemTimeZone() {
|
|
12
15
|
try {
|
|
13
16
|
const systemTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
14
|
-
return systemTimeZone
|
|
17
|
+
return isValidTimeZone(systemTimeZone) ? systemTimeZone : "";
|
|
15
18
|
}
|
|
16
19
|
catch {
|
|
17
20
|
return "";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Return
|
|
2
|
+
* Return a time zone's UTC offset at a given instant.
|
|
3
3
|
*
|
|
4
4
|
* - Unlike `getZonedOffset`, this doesn't need an existing zoned value in
|
|
5
5
|
* hand — pass any timeZone identifier and an instant to look up, which is
|
|
@@ -17,14 +17,22 @@
|
|
|
17
17
|
* - Only the instant is read from `instant`, as `isValidInstant` describes it: a bracketed zone
|
|
18
18
|
* in it is not validated, and an offset written to the minute that is that zone's sub-minute
|
|
19
19
|
* offset rounded (`-00:45[Africa/Monrovia]`, for −00:44:30) names the instant the zone gives.
|
|
20
|
+
* - The result is `±HH:MM`, or `±HH:MM:SS` where the zone was not on a whole minute
|
|
21
|
+
* (`Africa/Monrovia` stood at `-00:44:30` until 1972). It goes straight into the time zone
|
|
22
|
+
* position of any function whose result has no zone in it, and of this one: a UTC offset is its
|
|
23
|
+
* own answer at every instant, written without seconds when they are zero.
|
|
20
24
|
*
|
|
21
|
-
* @param timeZone IANA name or UTC offset
|
|
25
|
+
* @param timeZone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or a
|
|
26
|
+
* stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
22
27
|
* @param instant ISO 8601 instant string (e.g. "2024-07-15T12:00:00Z")
|
|
23
28
|
* @returns offset string (e.g. "-04:00"), or "" on invalid input
|
|
24
29
|
*
|
|
25
30
|
* @example getTimeZoneOffset("America/New_York", "2024-07-15T12:00:00Z") // "-04:00"
|
|
26
31
|
* @example getTimeZoneOffset("America/New_York", "2024-01-15T12:00:00Z") // "-05:00"
|
|
27
32
|
* @example getTimeZoneOffset("Asia/Kathmandu", "2024-01-15T12:00:00Z") // "+05:45"
|
|
33
|
+
* @example getTimeZoneOffset("Africa/Monrovia", "1970-01-01T12:00:00Z") // "-00:44:30" (an offset with seconds)
|
|
34
|
+
* @example getTimeZoneOffset("-00:44:30", "1970-01-01T12:00:00Z") // "-00:44:30" (its own result, read back)
|
|
35
|
+
* @example getTimeZoneOffset("+05:30:00", "1970-01-01T12:00:00Z") // "+05:30"
|
|
28
36
|
* @example getTimeZoneOffset("Invalid/Zone", "2024-07-15T12:00:00Z") // ""
|
|
29
37
|
* @example getTimeZoneOffset("America/New_York", "not an instant") // ""
|
|
30
38
|
* @example getTimeZoneOffset("America/New_York", "2024-07-15T16:00:00z") // "" (lower-case z)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { instantFrom } from "../../internal/instantNanoseconds.js";
|
|
2
2
|
import { hasInstantShape } from "../../internal/isoStringBody.js";
|
|
3
3
|
import { instantLeapSecond } from "../../regex/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { frameOffset, zoneFrame } from "../../internal/zoneFrame.js";
|
|
5
5
|
/**
|
|
6
|
-
* Return
|
|
6
|
+
* Return a time zone's UTC offset at a given instant.
|
|
7
7
|
*
|
|
8
8
|
* - Unlike `getZonedOffset`, this doesn't need an existing zoned value in
|
|
9
9
|
* hand — pass any timeZone identifier and an instant to look up, which is
|
|
@@ -21,14 +21,22 @@ import { isValidTimeZone } from "../validate/index.js";
|
|
|
21
21
|
* - Only the instant is read from `instant`, as `isValidInstant` describes it: a bracketed zone
|
|
22
22
|
* in it is not validated, and an offset written to the minute that is that zone's sub-minute
|
|
23
23
|
* offset rounded (`-00:45[Africa/Monrovia]`, for −00:44:30) names the instant the zone gives.
|
|
24
|
+
* - The result is `±HH:MM`, or `±HH:MM:SS` where the zone was not on a whole minute
|
|
25
|
+
* (`Africa/Monrovia` stood at `-00:44:30` until 1972). It goes straight into the time zone
|
|
26
|
+
* position of any function whose result has no zone in it, and of this one: a UTC offset is its
|
|
27
|
+
* own answer at every instant, written without seconds when they are zero.
|
|
24
28
|
*
|
|
25
|
-
* @param timeZone IANA name or UTC offset
|
|
29
|
+
* @param timeZone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or a
|
|
30
|
+
* stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
26
31
|
* @param instant ISO 8601 instant string (e.g. "2024-07-15T12:00:00Z")
|
|
27
32
|
* @returns offset string (e.g. "-04:00"), or "" on invalid input
|
|
28
33
|
*
|
|
29
34
|
* @example getTimeZoneOffset("America/New_York", "2024-07-15T12:00:00Z") // "-04:00"
|
|
30
35
|
* @example getTimeZoneOffset("America/New_York", "2024-01-15T12:00:00Z") // "-05:00"
|
|
31
36
|
* @example getTimeZoneOffset("Asia/Kathmandu", "2024-01-15T12:00:00Z") // "+05:45"
|
|
37
|
+
* @example getTimeZoneOffset("Africa/Monrovia", "1970-01-01T12:00:00Z") // "-00:44:30" (an offset with seconds)
|
|
38
|
+
* @example getTimeZoneOffset("-00:44:30", "1970-01-01T12:00:00Z") // "-00:44:30" (its own result, read back)
|
|
39
|
+
* @example getTimeZoneOffset("+05:30:00", "1970-01-01T12:00:00Z") // "+05:30"
|
|
32
40
|
* @example getTimeZoneOffset("Invalid/Zone", "2024-07-15T12:00:00Z") // ""
|
|
33
41
|
* @example getTimeZoneOffset("America/New_York", "not an instant") // ""
|
|
34
42
|
* @example getTimeZoneOffset("America/New_York", "2024-07-15T16:00:00z") // "" (lower-case z)
|
|
@@ -39,13 +47,18 @@ export function getTimeZoneOffset(timeZone, instant) {
|
|
|
39
47
|
if (typeof instant !== "string") {
|
|
40
48
|
return "";
|
|
41
49
|
}
|
|
42
|
-
|
|
50
|
+
const frame = zoneFrame(timeZone);
|
|
51
|
+
if (frame === null ||
|
|
43
52
|
instantLeapSecond.test(instant) ||
|
|
44
53
|
!hasInstantShape(instant)) {
|
|
45
54
|
return "";
|
|
46
55
|
}
|
|
47
56
|
try {
|
|
48
|
-
|
|
57
|
+
const at = instantFrom(instant);
|
|
58
|
+
// A stored offset with seconds is its own answer at every valid instant.
|
|
59
|
+
return frame.shiftNanoseconds !== 0n
|
|
60
|
+
? frameOffset(frame)
|
|
61
|
+
: at.toZonedDateTimeISO(frame.timeZone).offset;
|
|
49
62
|
}
|
|
50
63
|
catch {
|
|
51
64
|
return "";
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
5
5
|
* - Validation is performed on the timezone.
|
|
6
6
|
*
|
|
7
|
-
* @param ianaTimezone IANA
|
|
7
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
8
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
8
9
|
* @returns current day string (zero-padded to 2 digits) or "" on invalid input
|
|
9
10
|
*
|
|
10
11
|
* @example getZonedDay("America/New_York") // "28"
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isValidTimeZone } from "../validate/index.js";
|
|
1
|
+
import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
|
|
3
2
|
/**
|
|
4
3
|
* Return the current day of month for the specified IANA timeZone.
|
|
5
4
|
*
|
|
6
5
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
7
6
|
* - Validation is performed on the timezone.
|
|
8
7
|
*
|
|
9
|
-
* @param ianaTimezone IANA
|
|
8
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
9
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
10
10
|
* @returns current day string (zero-padded to 2 digits) or "" on invalid input
|
|
11
11
|
*
|
|
12
12
|
* @example getZonedDay("America/New_York") // "28"
|
|
13
13
|
* @example getZonedDay("invalid") // ""
|
|
14
14
|
*/
|
|
15
15
|
export function getZonedDay(ianaTimezone) {
|
|
16
|
-
|
|
16
|
+
const frame = zoneFrame(ianaTimezone);
|
|
17
|
+
if (frame === null)
|
|
17
18
|
return "";
|
|
18
19
|
try {
|
|
19
|
-
return
|
|
20
|
-
.day.toString()
|
|
21
|
-
.padStart(2, "0");
|
|
20
|
+
return frameNowWallClock(frame).day.toString().padStart(2, "0");
|
|
22
21
|
}
|
|
23
22
|
catch {
|
|
24
23
|
return "";
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* - Returns 1-7 (Monday=1 through Sunday=7).
|
|
6
6
|
* - Validation is performed on the timezone.
|
|
7
7
|
*
|
|
8
|
-
* @param ianaTimezone IANA
|
|
8
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
9
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
9
10
|
* @returns current day of week number (1-7) or null on invalid input
|
|
10
11
|
*
|
|
11
12
|
* @example getZonedDayOfWeek("America/New_York") // 3
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isValidTimeZone } from "../validate/index.js";
|
|
1
|
+
import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
|
|
3
2
|
/**
|
|
4
3
|
* Return the current day of week for the specified IANA timeZone.
|
|
5
4
|
*
|
|
@@ -7,17 +6,19 @@ import { isValidTimeZone } from "../validate/index.js";
|
|
|
7
6
|
* - Returns 1-7 (Monday=1 through Sunday=7).
|
|
8
7
|
* - Validation is performed on the timezone.
|
|
9
8
|
*
|
|
10
|
-
* @param ianaTimezone IANA
|
|
9
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
10
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
11
11
|
* @returns current day of week number (1-7) or null on invalid input
|
|
12
12
|
*
|
|
13
13
|
* @example getZonedDayOfWeek("America/New_York") // 3
|
|
14
14
|
* @example getZonedDayOfWeek("invalid") // null
|
|
15
15
|
*/
|
|
16
16
|
export function getZonedDayOfWeek(ianaTimezone) {
|
|
17
|
-
|
|
17
|
+
const frame = zoneFrame(ianaTimezone);
|
|
18
|
+
if (frame === null)
|
|
18
19
|
return null;
|
|
19
20
|
try {
|
|
20
|
-
const now =
|
|
21
|
+
const now = frameNowWallClock(frame);
|
|
21
22
|
return now.dayOfWeek;
|
|
22
23
|
}
|
|
23
24
|
catch {
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
5
5
|
* - Validation is performed on the timezone.
|
|
6
6
|
*
|
|
7
|
-
* @param ianaTimezone IANA
|
|
7
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
8
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
8
9
|
* @returns current hour string (zero-padded to 2 digits) or "" on invalid input
|
|
9
10
|
*
|
|
10
11
|
* @example getZonedHour("America/New_York") // "19"
|
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isValidTimeZone } from "../validate/index.js";
|
|
1
|
+
import { frameNowWallClock, zoneFrame } from "../../internal/zoneFrame.js";
|
|
3
2
|
/**
|
|
4
3
|
* Return the current hour for the specified IANA timeZone.
|
|
5
4
|
*
|
|
6
5
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
7
6
|
* - Validation is performed on the timezone.
|
|
8
7
|
*
|
|
9
|
-
* @param ianaTimezone IANA
|
|
8
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
9
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
10
10
|
* @returns current hour string (zero-padded to 2 digits) or "" on invalid input
|
|
11
11
|
*
|
|
12
12
|
* @example getZonedHour("America/New_York") // "19"
|
|
13
13
|
* @example getZonedHour("invalid") // ""
|
|
14
14
|
*/
|
|
15
15
|
export function getZonedHour(ianaTimezone) {
|
|
16
|
-
|
|
16
|
+
const frame = zoneFrame(ianaTimezone);
|
|
17
|
+
if (frame === null)
|
|
17
18
|
return "";
|
|
18
19
|
try {
|
|
19
|
-
return
|
|
20
|
-
.hour.toString()
|
|
21
|
-
.padStart(2, "0");
|
|
20
|
+
return frameNowWallClock(frame).hour.toString().padStart(2, "0");
|
|
22
21
|
}
|
|
23
22
|
catch {
|
|
24
23
|
return "";
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
5
5
|
* - Validation is performed on the timezone.
|
|
6
6
|
*
|
|
7
|
-
* @param ianaTimezone IANA
|
|
7
|
+
* @param ianaTimezone IANA name or UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or
|
|
8
|
+
* a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns)
|
|
8
9
|
* @returns current microsecond string (zero-padded to 3 digits) or "" on invalid input
|
|
9
10
|
*
|
|
10
11
|
* @example getZonedMicrosecond("America/New_York") // "000"
|