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