@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
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import { isoYearString } from "./isoYearString.js";
|
|
2
3
|
/**
|
|
3
4
|
* One field of a zoned "now" as the `get*NowUnit` accessors return it: zero-padded to two digits
|
|
4
|
-
* (three for sub-second fields), the
|
|
5
|
+
* (three for sub-second fields), the day of week unpadded, and the year as Temporal writes one
|
|
6
|
+
* (`isoYearString`: four digits, or a sign and six outside 0000–9999). The week number is the
|
|
5
7
|
* caller's, since the plain and zoned accessors read it through `parseWeekFromDate` and the utc and
|
|
6
8
|
* unix ones from the ISO date.
|
|
7
9
|
*
|
|
8
|
-
* @param now the current moment on the wall clock being read
|
|
10
|
+
* @param now the current moment on the wall clock being read: a zoned date-time, or the plain wall
|
|
11
|
+
* clock of a stored UTC offset with seconds, which no time zone identifier can carry
|
|
9
12
|
* @param unit a singular unit, `dayOfWeek` included (already validated by the caller)
|
|
10
13
|
* @param week the week number for `now`, as a string
|
|
11
14
|
* @returns the field, or "" for any other unit
|
|
@@ -16,7 +19,7 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
16
19
|
export function zonedNowUnitValue(now, unit, week) {
|
|
17
20
|
switch (unit) {
|
|
18
21
|
case "year":
|
|
19
|
-
return now.year
|
|
22
|
+
return isoYearString(now.year);
|
|
20
23
|
case "month":
|
|
21
24
|
return now.month.toString().padStart(2, "0");
|
|
22
25
|
case "week":
|
|
@@ -44,7 +47,8 @@ export function zonedNowUnitValue(now, unit, week) {
|
|
|
44
47
|
/**
|
|
45
48
|
* The ISO 8601 week number of `now`'s date, the week the utc and unix `get*NowUnit` accessors read.
|
|
46
49
|
*
|
|
47
|
-
* @param now the current moment on the wall clock being read
|
|
50
|
+
* @param now the current moment on the wall clock being read: a zoned date-time, or the plain wall
|
|
51
|
+
* clock of a stored UTC offset with seconds, which no time zone identifier can carry
|
|
48
52
|
* @returns the week number as a string
|
|
49
53
|
* @example isoWeekOfYear(Temporal.ZonedDateTime.from("2024-12-30T00:00:00+00:00[UTC]")) // "1"
|
|
50
54
|
*/
|
|
@@ -3,6 +3,7 @@ import { TIME_ZONE_ANNOTATION } from "./isoStringBody.js";
|
|
|
3
3
|
import { MAX_EPOCH_NANOSECONDS, MIN_EPOCH_NANOSECONDS, } from "./epochNanoseconds.js";
|
|
4
4
|
import { calendarDateAdd as compatCalendarDateAdd, calendarDateUntil as compatCalendarDateUntil, isCalendarArithmeticCompatNeeded, isNudgeWindowCompatNeeded, } from "./temporalCompat/index.js";
|
|
5
5
|
import { epochNanosecondsFor, isNamedTimeZone, isValidEpoch, utcEpochNanoseconds, zonedDateTimeFrom, } from "./zonedWallClock.js";
|
|
6
|
+
import { isObject } from "./isObject.js";
|
|
6
7
|
const UNITS = [
|
|
7
8
|
"year",
|
|
8
9
|
"month",
|
|
@@ -771,7 +772,7 @@ function zonedRelativeTo(relativeTo) {
|
|
|
771
772
|
? zonedDateTimeFrom(relativeTo)
|
|
772
773
|
: null;
|
|
773
774
|
}
|
|
774
|
-
if (
|
|
775
|
+
if (isObject(relativeTo) &&
|
|
775
776
|
!(relativeTo instanceof Temporal.PlainDateTime) &&
|
|
776
777
|
"timeZone" in relativeTo &&
|
|
777
778
|
relativeTo.timeZone !== undefined) {
|
|
@@ -956,7 +957,7 @@ function relativeToDayOfMonth(relativeTo, zoned) {
|
|
|
956
957
|
if (typeof relativeTo === "string") {
|
|
957
958
|
return Temporal.PlainDate.from(relativeTo).day;
|
|
958
959
|
}
|
|
959
|
-
if (relativeTo
|
|
960
|
+
if (isObject(relativeTo)) {
|
|
960
961
|
return Temporal.PlainDate.from(relativeTo).day;
|
|
961
962
|
}
|
|
962
963
|
}
|
|
@@ -978,8 +979,7 @@ function plainRelativeTo(relativeTo) {
|
|
|
978
979
|
!timeZoneAnnotation.test(relativeTo)) {
|
|
979
980
|
return Temporal.PlainDate.from(relativeTo);
|
|
980
981
|
}
|
|
981
|
-
if (relativeTo
|
|
982
|
-
typeof relativeTo === "object" &&
|
|
982
|
+
if (isObject(relativeTo) &&
|
|
983
983
|
!(relativeTo instanceof Temporal.ZonedDateTime)) {
|
|
984
984
|
return Temporal.PlainDate.from(relativeTo);
|
|
985
985
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import type { Disambiguation, Offset, Overflow } from "../types/index.js";
|
|
3
|
+
import type { DATE_TIME_FIELDS, SetFields } from "./readSetFields.js";
|
|
3
4
|
type RoundingSmallestUnit = Temporal.SmallestUnit<"day" | "hour" | "minute" | "second" | "millisecond" | "microsecond" | "nanosecond">;
|
|
4
5
|
interface ZonedRoundTo {
|
|
5
6
|
smallestUnit: RoundingSmallestUnit;
|
|
@@ -125,15 +126,17 @@ interface ZonedWithOptions {
|
|
|
125
126
|
disambiguation?: Disambiguation;
|
|
126
127
|
offset?: Offset;
|
|
127
128
|
}
|
|
129
|
+
/** The date and time fields a `set*` function passes, as `readSetFields` checked them. */
|
|
130
|
+
type ZonedWithFields = SetFields<(typeof DATE_TIME_FIELDS)[number]>;
|
|
128
131
|
/**
|
|
129
132
|
* `ZonedDateTime#with`, correct at the range limits.
|
|
130
133
|
*
|
|
131
134
|
* @param zoned the value to change
|
|
132
|
-
* @param fields the date
|
|
135
|
+
* @param fields the date and time fields to set
|
|
133
136
|
* @param options Temporal `overflow` / `disambiguation` / `offset` (default `"prefer"`)
|
|
134
137
|
* @returns the changed value; throws where TC39 Temporal throws
|
|
135
138
|
*/
|
|
136
|
-
export declare function withZonedFields(zoned: Temporal.ZonedDateTime, fields:
|
|
139
|
+
export declare function withZonedFields(zoned: Temporal.ZonedDateTime, fields: ZonedWithFields, options?: ZonedWithOptions): Temporal.ZonedDateTime;
|
|
137
140
|
/**
|
|
138
141
|
* `ZonedDateTime#round`, correct at the range limits and, by day, before 1847.
|
|
139
142
|
*
|
|
@@ -2,7 +2,7 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
2
2
|
import { MAX_EPOCH_NANOSECONDS } from "./epochNanoseconds.js";
|
|
3
3
|
import { calendarDateAdd, isCalendarArithmeticCompatNeeded, isTransitionSearchCompatNeeded, } from "./temporalCompat/index.js";
|
|
4
4
|
import { nextTransitionAfter, previousTransitionBefore, } from "./zonedTransitionSearch.js";
|
|
5
|
-
import { epochNanosecondsFor, interpretISODateTimeOffset, isNamedTimeZone, isNearRangeEdge, isValidEpoch, MAX_TRANSITIONS_BEFORE_MAXIMUM, missedNextTransition, missedPreviousTransition, needsOwnDayBoundsSearch, needsOwnStartOfDaySearch, NEXT_TRANSITION_HORIZON_NANOSECONDS, startOfDayEpochNanoseconds, timeZoneIdOf,
|
|
5
|
+
import { epochNanosecondsFor, interpretISODateTimeOffset, isNamedTimeZone, isNearRangeEdge, isValidEpoch, MAX_TRANSITIONS_BEFORE_MAXIMUM, missedNextTransition, missedPreviousTransition, needsOwnDayBoundsSearch, needsOwnStartOfDaySearch, NEXT_TRANSITION_HORIZON_NANOSECONDS, startOfDayEpochNanoseconds, timeZoneIdOf, } from "./zonedWallClock.js";
|
|
6
6
|
import { optionOrDefault } from "./optionOrDefault.js";
|
|
7
7
|
/*
|
|
8
8
|
* Polyfill-first wrappers for the Temporal operations that resolve a wall clock or a start of day
|
|
@@ -480,22 +480,19 @@ export function addToZonedDisambiguated(zoned, duration, sign, options) {
|
|
|
480
480
|
/** TC39 `ZonedDateTime#with` at the range limits. */
|
|
481
481
|
function withAtEdge(zoned, fields, options) {
|
|
482
482
|
let wall;
|
|
483
|
-
let offset;
|
|
484
483
|
try {
|
|
485
484
|
Temporal.ZonedDateTime.from(zoned, options);
|
|
486
|
-
const { offset: offsetString, ...dateTimeFields } = fields;
|
|
487
485
|
wall = zoned
|
|
488
486
|
.toPlainDateTime()
|
|
489
|
-
.with(
|
|
490
|
-
offset = {
|
|
491
|
-
nanoseconds: offsetString === undefined
|
|
492
|
-
? BigInt(zoned.offsetNanoseconds)
|
|
493
|
-
: utcOffsetStringNanoseconds(offsetString),
|
|
494
|
-
};
|
|
487
|
+
.with(fields, { overflow: options?.overflow });
|
|
495
488
|
}
|
|
496
489
|
catch {
|
|
497
490
|
return null;
|
|
498
491
|
}
|
|
492
|
+
// `fields` holds no offset, so the merged wall clock keeps the receiver's (ZonedDateTime#with).
|
|
493
|
+
const offset = {
|
|
494
|
+
nanoseconds: BigInt(zoned.offsetNanoseconds),
|
|
495
|
+
};
|
|
499
496
|
if (!isAtRangeEdge(zoned.timeZoneId, wall.toPlainDate())) {
|
|
500
497
|
return null;
|
|
501
498
|
}
|
|
@@ -506,7 +503,7 @@ function withAtEdge(zoned, fields, options) {
|
|
|
506
503
|
* `ZonedDateTime#with`, correct at the range limits.
|
|
507
504
|
*
|
|
508
505
|
* @param zoned the value to change
|
|
509
|
-
* @param fields the date
|
|
506
|
+
* @param fields the date and time fields to set
|
|
510
507
|
* @param options Temporal `overflow` / `disambiguation` / `offset` (default `"prefer"`)
|
|
511
508
|
* @returns the changed value; throws where TC39 Temporal throws
|
|
512
509
|
*/
|
|
@@ -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 { calendarSystemOfDateValue, formatDateInCalendar,
|
|
2
|
+
import { calendarSystemOfDateValue, formatDateInCalendar, parseCalendarDateValue, plainDateAdd, readDurationUnits, resolveOverflow, } from "../../internal/index.js";
|
|
3
3
|
import { isValidCalendarDate, isValidDateDurationUnit } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
/**
|
|
@@ -37,11 +37,8 @@ export function addDate(value /* ISO 8601 date */, units, options) {
|
|
|
37
37
|
return "";
|
|
38
38
|
}
|
|
39
39
|
const validDate = isValidCalendarDate(value);
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
Object.keys(units).every(isValidDateDurationUnit);
|
|
43
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
44
|
-
if (!validDate || !validUnits || !validAmounts) {
|
|
40
|
+
const amounts = readDurationUnits(units, isValidDateDurationUnit);
|
|
41
|
+
if (!validDate || amounts === null) {
|
|
45
42
|
return "";
|
|
46
43
|
}
|
|
47
44
|
try {
|
|
@@ -50,7 +47,7 @@ export function addDate(value /* ISO 8601 date */, units, options) {
|
|
|
50
47
|
return "";
|
|
51
48
|
}
|
|
52
49
|
const date = parseCalendarDateValue(value);
|
|
53
|
-
const result = plainDateAdd(date,
|
|
50
|
+
const result = plainDateAdd(date, amounts, resolveOverflow(options?.overflow));
|
|
54
51
|
return formatDateInCalendar(result, calendar);
|
|
55
52
|
}
|
|
56
53
|
catch {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
-
import {
|
|
3
|
+
import { readDurationUnits, resolveOverflow } from "../../internal/index.js";
|
|
4
4
|
import { isValidDateTime, isValidDateTimeDurationUnit } from "../validate/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
6
6
|
/**
|
|
@@ -24,17 +24,14 @@ export function addDateTime(value, units, options) {
|
|
|
24
24
|
return "";
|
|
25
25
|
}
|
|
26
26
|
const validDateTime = isValidDateTime(value);
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
Object.keys(units).every(isValidDateTimeDurationUnit);
|
|
30
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
31
|
-
if (!validDateTime || !validUnits || !validAmounts) {
|
|
27
|
+
const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
|
|
28
|
+
if (!validDateTime || amounts === null) {
|
|
32
29
|
return "";
|
|
33
30
|
}
|
|
34
31
|
try {
|
|
35
32
|
const dateTime = Temporal.PlainDateTime.from(value);
|
|
36
33
|
return dateTime
|
|
37
|
-
.add(
|
|
34
|
+
.add(amounts, { overflow: resolveOverflow(options?.overflow) })
|
|
38
35
|
.toString();
|
|
39
36
|
}
|
|
40
37
|
catch {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
-
import {
|
|
3
|
+
import { readDurationUnits } from "../../internal/index.js";
|
|
4
4
|
import { isValidTime, isValidTimeDurationUnit } from "../validate/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* Return a PlainTime ISO string with `units` added to `value`.
|
|
@@ -22,16 +22,13 @@ import { isValidTime, isValidTimeDurationUnit } from "../validate/index.js";
|
|
|
22
22
|
export function addTime(value, units) {
|
|
23
23
|
try {
|
|
24
24
|
const validTime = isValidTime(value);
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
Object.keys(units).every(isValidTimeDurationUnit);
|
|
28
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
29
|
-
if (!validTime || !validUnits || !validAmounts) {
|
|
25
|
+
const amounts = readDurationUnits(units, isValidTimeDurationUnit);
|
|
26
|
+
if (!validTime || amounts === null) {
|
|
30
27
|
return "";
|
|
31
28
|
}
|
|
32
29
|
try {
|
|
33
30
|
const time = Temporal.PlainTime.from(value);
|
|
34
|
-
return time.add(
|
|
31
|
+
return time.add(amounts).toString();
|
|
35
32
|
}
|
|
36
33
|
catch {
|
|
37
34
|
return "";
|
|
@@ -8,7 +8,7 @@ import type { FractionalDigit } from "../../types/index.js";
|
|
|
8
8
|
* import { EndOfTimeUnit } from "@northguild/gmt/plain";
|
|
9
9
|
* const unit: EndOfTimeUnit = "minutes";
|
|
10
10
|
*/
|
|
11
|
-
export type EndOfTimeUnit = Temporal.SmallestUnit<Temporal.TimeUnit
|
|
11
|
+
export type EndOfTimeUnit = Temporal.SmallestUnit<"day" | Temporal.TimeUnit>;
|
|
12
12
|
/**
|
|
13
13
|
* Return the end of the specified time `unit` for a given ISO 8601 time string.
|
|
14
14
|
*
|
|
@@ -8,8 +8,20 @@ import type { Overflow } from "../../types/index.js";
|
|
|
8
8
|
* field-by-field: each sequential `.add()` resolves overflow against its own intermediate
|
|
9
9
|
* value, so setting month-then-day vs. day-then-month on the same target can silently
|
|
10
10
|
* diverge — `.with()` has no such order-dependence.
|
|
11
|
-
* - `fields` may set `year`, `month`, `monthCode
|
|
12
|
-
*
|
|
11
|
+
* - `fields` may set `year`, `month`, `monthCode` and/or `day`; omitted fields keep their current
|
|
12
|
+
* value. An object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
|
|
13
|
+
* - Values are not converted: `year`, `month` and `day` must be integer numbers and `monthCode` a
|
|
14
|
+
* string. `null`, a numeric string, a boolean or a fraction returns "", where Temporal would
|
|
15
|
+
* convert or truncate it. A bigint, `NaN` or an infinity returns "" too. A number too large for
|
|
16
|
+
* its field follows `overflow`. A month or day below 1, or a date outside Temporal's range,
|
|
17
|
+
* returns "".
|
|
18
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". So does a
|
|
19
|
+
* field this function does not take, such as `hour`, or a `calendar` or `timeZone` property,
|
|
20
|
+
* whether own, inherited or a getter. A field is read with a property get, as Temporal reads it,
|
|
21
|
+
* so an inherited or getter field is set.
|
|
22
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
23
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
24
|
+
* nothing instead.
|
|
13
25
|
* - Returns "" for invalid input.
|
|
14
26
|
*
|
|
15
27
|
* @param value ISO PlainDate string
|
|
@@ -20,10 +32,15 @@ import type { Overflow } from "../../types/index.js";
|
|
|
20
32
|
* @example setDate("2024-03-10", { year: 2025 }) // "2025-03-10"
|
|
21
33
|
* @example setDate("2024-01-31", { month: 2 }) // "2024-02-29" (constrain clamps to the last valid day)
|
|
22
34
|
* @example setDate("2024-01-31", { month: 2 }, { overflow: "reject" }) // ""
|
|
35
|
+
* @example setDate("2024-01-31", { month: 13 }) // "2024-12-31" (too large: constrain clamps it)
|
|
36
|
+
* @example setDate("2024-01-31", { month: 0 }) // "" (below 1, under either overflow)
|
|
23
37
|
* @example setDate("2024-03-10", {}) // "2024-03-10" (empty fields object is a no-op)
|
|
38
|
+
* @example setDate("2024-01-31", { year: "2025" }) // "" (not converted)
|
|
39
|
+
* @example setDate("2024-01-31", { year: 2025, yaer: 1 }) // "" (misspelt key)
|
|
40
|
+
* @example setDate("2024-03-10", { year: 2025, hour: 5 }) // "" (setDate takes no hour)
|
|
24
41
|
* @example setDate("invalid", { year: 2025 }) // ""
|
|
25
42
|
*/
|
|
26
|
-
export declare function setDate(value: string, fields: Omit<Temporal.PlainDateLike, "calendar">, options?: {
|
|
43
|
+
export declare function setDate(value: string, fields: Omit<Temporal.PlainDateLike, "calendar" | "era" | "eraYear">, options?: {
|
|
27
44
|
/**
|
|
28
45
|
* What to do when the fields do not form a real date. `"constrain"` clamps to the last valid
|
|
29
46
|
* day, so `month: 2` on the 31st gives Feb 29 or 28; `"reject"` returns `""`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { resolveOverflow } from "../../internal/index.js";
|
|
2
|
+
import { DATE_FIELDS, readSetFields, resolveOverflow } from "../../internal/index.js";
|
|
3
3
|
import { isValidDate } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
/**
|
|
@@ -10,8 +10,20 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
10
10
|
* field-by-field: each sequential `.add()` resolves overflow against its own intermediate
|
|
11
11
|
* value, so setting month-then-day vs. day-then-month on the same target can silently
|
|
12
12
|
* diverge — `.with()` has no such order-dependence.
|
|
13
|
-
* - `fields` may set `year`, `month`, `monthCode
|
|
14
|
-
*
|
|
13
|
+
* - `fields` may set `year`, `month`, `monthCode` and/or `day`; omitted fields keep their current
|
|
14
|
+
* value. An object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
|
|
15
|
+
* - Values are not converted: `year`, `month` and `day` must be integer numbers and `monthCode` a
|
|
16
|
+
* string. `null`, a numeric string, a boolean or a fraction returns "", where Temporal would
|
|
17
|
+
* convert or truncate it. A bigint, `NaN` or an infinity returns "" too. A number too large for
|
|
18
|
+
* its field follows `overflow`. A month or day below 1, or a date outside Temporal's range,
|
|
19
|
+
* returns "".
|
|
20
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". So does a
|
|
21
|
+
* field this function does not take, such as `hour`, or a `calendar` or `timeZone` property,
|
|
22
|
+
* whether own, inherited or a getter. A field is read with a property get, as Temporal reads it,
|
|
23
|
+
* so an inherited or getter field is 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.
|
|
15
27
|
* - Returns "" for invalid input.
|
|
16
28
|
*
|
|
17
29
|
* @param value ISO PlainDate string
|
|
@@ -22,7 +34,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
22
34
|
* @example setDate("2024-03-10", { year: 2025 }) // "2025-03-10"
|
|
23
35
|
* @example setDate("2024-01-31", { month: 2 }) // "2024-02-29" (constrain clamps to the last valid day)
|
|
24
36
|
* @example setDate("2024-01-31", { month: 2 }, { overflow: "reject" }) // ""
|
|
37
|
+
* @example setDate("2024-01-31", { month: 13 }) // "2024-12-31" (too large: constrain clamps it)
|
|
38
|
+
* @example setDate("2024-01-31", { month: 0 }) // "" (below 1, under either overflow)
|
|
25
39
|
* @example setDate("2024-03-10", {}) // "2024-03-10" (empty fields object is a no-op)
|
|
40
|
+
* @example setDate("2024-01-31", { year: "2025" }) // "" (not converted)
|
|
41
|
+
* @example setDate("2024-01-31", { year: 2025, yaer: 1 }) // "" (misspelt key)
|
|
42
|
+
* @example setDate("2024-03-10", { year: 2025, hour: 5 }) // "" (setDate takes no hour)
|
|
26
43
|
* @example setDate("invalid", { year: 2025 }) // ""
|
|
27
44
|
*/
|
|
28
45
|
export function setDate(value, fields, options) {
|
|
@@ -33,12 +50,15 @@ export function setDate(value, fields, options) {
|
|
|
33
50
|
return "";
|
|
34
51
|
try {
|
|
35
52
|
const date = Temporal.PlainDate.from(value);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
53
|
+
const set = readSetFields(fields, DATE_FIELDS);
|
|
54
|
+
if (set === null)
|
|
55
|
+
return "";
|
|
56
|
+
// Only the values readSetFields checked reach Temporal. An empty result sets nothing: a
|
|
57
|
+
// no-op here, where Temporal's with() would throw.
|
|
58
|
+
if (Object.keys(set).length === 0)
|
|
39
59
|
return date.toString();
|
|
40
60
|
return date
|
|
41
|
-
.with(
|
|
61
|
+
.with(set, { overflow: resolveOverflow(options?.overflow) })
|
|
42
62
|
.toString();
|
|
43
63
|
}
|
|
44
64
|
catch {
|
|
@@ -7,8 +7,19 @@ import type { Overflow } from "../../types/index.js";
|
|
|
7
7
|
* single atomic overflow pass — see `setDate`'s doc for why that matters over composing
|
|
8
8
|
* `addDateTime()` calls field-by-field.
|
|
9
9
|
* - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
|
|
10
|
-
* `millisecond`, `microsecond
|
|
11
|
-
*
|
|
10
|
+
* `millisecond`, `microsecond` and/or `nanosecond`; omitted fields keep their current value. An
|
|
11
|
+
* object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
|
|
12
|
+
* - Values are not converted: `monthCode` must be a string and every other field an integer number.
|
|
13
|
+
* `null`, a numeric string, a boolean or a fraction returns "", where Temporal would convert or
|
|
14
|
+
* truncate it. A bigint, `NaN` or an infinity returns "" too. A number too large for its
|
|
15
|
+
* field follows `overflow`. A month or day below 1, or a date outside Temporal's range, returns
|
|
16
|
+
* "".
|
|
17
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". So does an
|
|
18
|
+
* era, or a `calendar` or `timeZone` property, whether own, inherited or a getter. A field is
|
|
19
|
+
* read with a property get, as Temporal reads it, so an inherited or getter field is set.
|
|
20
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
21
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
22
|
+
* nothing instead.
|
|
12
23
|
* - Returns "" for invalid input.
|
|
13
24
|
*
|
|
14
25
|
* @param value ISO PlainDateTime string
|
|
@@ -20,9 +31,10 @@ import type { Overflow } from "../../types/index.js";
|
|
|
20
31
|
* @example setDateTime("2024-01-31T12:00:00", { month: 2 }) // "2024-02-29T12:00:00" (constrain clamps to the last valid day)
|
|
21
32
|
* @example setDateTime("2024-01-31T12:00:00", { month: 2 }, { overflow: "reject" }) // ""
|
|
22
33
|
* @example setDateTime("2024-03-10T12:00:00", {}) // "2024-03-10T12:00:00" (empty fields object is a no-op)
|
|
34
|
+
* @example setDateTime("2024-03-10T12:00:00", { hour: "9" }) // "" (not converted)
|
|
23
35
|
* @example setDateTime("invalid", { hour: 9 }) // ""
|
|
24
36
|
*/
|
|
25
|
-
export declare function setDateTime(value: string, fields: Omit<Temporal.PlainDateTimeLike, "calendar">, options?: {
|
|
37
|
+
export declare function setDateTime(value: string, fields: Omit<Temporal.PlainDateTimeLike, "calendar" | "era" | "eraYear">, options?: {
|
|
26
38
|
/**
|
|
27
39
|
* What to do when the fields do not form a real date-time. `"constrain"` clamps each field to
|
|
28
40
|
* its nearest valid value, so `month: 2` on the 31st gives Feb 29 or 28; `"reject"` returns
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { resolveOverflow } from "../../internal/index.js";
|
|
2
|
+
import { DATE_TIME_FIELDS, readSetFields, resolveOverflow, } from "../../internal/index.js";
|
|
3
3
|
import { isValidDateTime } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
/**
|
|
@@ -9,8 +9,19 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
9
9
|
* single atomic overflow pass — see `setDate`'s doc for why that matters over composing
|
|
10
10
|
* `addDateTime()` calls field-by-field.
|
|
11
11
|
* - `fields` may set any of `year`, `month`, `monthCode`, `day`, `hour`, `minute`, `second`,
|
|
12
|
-
* `millisecond`, `microsecond
|
|
13
|
-
*
|
|
12
|
+
* `millisecond`, `microsecond` and/or `nanosecond`; omitted fields keep their current value. An
|
|
13
|
+
* object with no field set, such as `{}` or `{ year: undefined }`, is a no-op.
|
|
14
|
+
* - Values are not converted: `monthCode` must be a string and every other field an integer number.
|
|
15
|
+
* `null`, a numeric string, a boolean or a fraction returns "", where Temporal would convert or
|
|
16
|
+
* truncate it. A bigint, `NaN` or an infinity returns "" too. A number too large for its
|
|
17
|
+
* field follows `overflow`. A month or day below 1, or a date outside Temporal's range, returns
|
|
18
|
+
* "".
|
|
19
|
+
* - An own key that is not one of these fields, such as a misspelt `yaer`, returns "". So does an
|
|
20
|
+
* era, or a `calendar` or `timeZone` property, whether own, inherited or a getter. A field is
|
|
21
|
+
* read with a property get, as Temporal reads it, so an inherited or getter field is set.
|
|
22
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
23
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
24
|
+
* nothing instead.
|
|
14
25
|
* - Returns "" for invalid input.
|
|
15
26
|
*
|
|
16
27
|
* @param value ISO PlainDateTime string
|
|
@@ -22,6 +33,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
22
33
|
* @example setDateTime("2024-01-31T12:00:00", { month: 2 }) // "2024-02-29T12:00:00" (constrain clamps to the last valid day)
|
|
23
34
|
* @example setDateTime("2024-01-31T12:00:00", { month: 2 }, { overflow: "reject" }) // ""
|
|
24
35
|
* @example setDateTime("2024-03-10T12:00:00", {}) // "2024-03-10T12:00:00" (empty fields object is a no-op)
|
|
36
|
+
* @example setDateTime("2024-03-10T12:00:00", { hour: "9" }) // "" (not converted)
|
|
25
37
|
* @example setDateTime("invalid", { hour: 9 }) // ""
|
|
26
38
|
*/
|
|
27
39
|
export function setDateTime(value, fields, options) {
|
|
@@ -32,12 +44,15 @@ export function setDateTime(value, fields, options) {
|
|
|
32
44
|
return "";
|
|
33
45
|
try {
|
|
34
46
|
const dateTime = Temporal.PlainDateTime.from(value);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
const set = readSetFields(fields, DATE_TIME_FIELDS);
|
|
48
|
+
if (set === null)
|
|
49
|
+
return "";
|
|
50
|
+
// Only the values readSetFields checked reach Temporal. An empty result sets nothing: a
|
|
51
|
+
// no-op here, where Temporal's with() would throw.
|
|
52
|
+
if (Object.keys(set).length === 0)
|
|
38
53
|
return dateTime.toString();
|
|
39
54
|
return dateTime
|
|
40
|
-
.with(
|
|
55
|
+
.with(set, { overflow: resolveOverflow(options?.overflow) })
|
|
41
56
|
.toString();
|
|
42
57
|
}
|
|
43
58
|
catch {
|
|
@@ -7,7 +7,18 @@ import type { Overflow } from "../../types/index.js";
|
|
|
7
7
|
* single atomic overflow pass — see `setDate`'s doc for why that matters over composing
|
|
8
8
|
* `addTime()` calls field-by-field.
|
|
9
9
|
* - `fields` may set any of `hour`, `minute`, `second`, `millisecond`, `microsecond`, and/or
|
|
10
|
-
* `nanosecond`; omitted fields keep their current value. An
|
|
10
|
+
* `nanosecond`; omitted fields keep their current value. An object with no field set, such as
|
|
11
|
+
* `{}` or `{ hour: undefined }`, is a no-op.
|
|
12
|
+
* - Values are not converted: all six fields must be integer numbers. `null`, a numeric string, a
|
|
13
|
+
* boolean or a fraction returns "", where Temporal would convert or truncate it. A bigint, `NaN`
|
|
14
|
+
* or an infinity returns "" too. An out-of-range number follows `overflow`.
|
|
15
|
+
* - An own key that is not one of these fields, such as a misspelt `huor`, returns "". So does a
|
|
16
|
+
* date field, such as `year`, or a `calendar` or `timeZone` property, whether own, inherited or a
|
|
17
|
+
* getter. A field is read with a property get, as Temporal reads it, so an inherited or getter
|
|
18
|
+
* field is set.
|
|
19
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
20
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
21
|
+
* nothing instead.
|
|
11
22
|
* - Unlike `addTime`, which takes no `overflow` because addition always wraps around the clock,
|
|
12
23
|
* `overflow` has an effect here: `.with()` assigns fixed field values rather than adding a
|
|
13
24
|
* delta.
|
|
@@ -22,6 +33,7 @@ import type { Overflow } from "../../types/index.js";
|
|
|
22
33
|
* @example setTime("12:00:00", { hour: 25 }) // "23:00:00" (constrain clamps to the max valid hour)
|
|
23
34
|
* @example setTime("12:00:00", { hour: 25 }, { overflow: "reject" }) // ""
|
|
24
35
|
* @example setTime("12:00:00", {}) // "12:00:00" (empty fields object is a no-op)
|
|
36
|
+
* @example setTime("12:00:00", { hour: 9.5 }) // "" (not truncated)
|
|
25
37
|
* @example setTime("invalid", { hour: 9 }) // ""
|
|
26
38
|
*/
|
|
27
39
|
export declare function setTime(value: string, fields: Temporal.PlainTimeLike, options?: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { resolveOverflow } from "../../internal/index.js";
|
|
2
|
+
import { TIME_FIELDS, readSetFields, resolveOverflow } from "../../internal/index.js";
|
|
3
3
|
import { isValidTime } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
5
|
/**
|
|
@@ -9,7 +9,18 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
9
9
|
* single atomic overflow pass — see `setDate`'s doc for why that matters over composing
|
|
10
10
|
* `addTime()` calls field-by-field.
|
|
11
11
|
* - `fields` may set any of `hour`, `minute`, `second`, `millisecond`, `microsecond`, and/or
|
|
12
|
-
* `nanosecond`; omitted fields keep their current value. An
|
|
12
|
+
* `nanosecond`; omitted fields keep their current value. An object with no field set, such as
|
|
13
|
+
* `{}` or `{ hour: undefined }`, is a no-op.
|
|
14
|
+
* - Values are not converted: all six fields must be integer numbers. `null`, a numeric string, a
|
|
15
|
+
* boolean or a fraction returns "", where Temporal would convert or truncate it. A bigint, `NaN`
|
|
16
|
+
* or an infinity returns "" too. An out-of-range number follows `overflow`.
|
|
17
|
+
* - An own key that is not one of these fields, such as a misspelt `huor`, returns "". So does a
|
|
18
|
+
* date field, such as `year`, or a `calendar` or `timeZone` property, whether own, inherited or a
|
|
19
|
+
* getter. A field is read with a property get, as Temporal reads it, so an inherited or getter
|
|
20
|
+
* field is set.
|
|
21
|
+
* - A Temporal date or time object returns "", as Temporal's `with` refuses one. One whose
|
|
22
|
+
* prototype has been replaced with `Object.prototype`, `null` or `Function.prototype` sets
|
|
23
|
+
* nothing instead.
|
|
13
24
|
* - Unlike `addTime`, which takes no `overflow` because addition always wraps around the clock,
|
|
14
25
|
* `overflow` has an effect here: `.with()` assigns fixed field values rather than adding a
|
|
15
26
|
* delta.
|
|
@@ -24,6 +35,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
24
35
|
* @example setTime("12:00:00", { hour: 25 }) // "23:00:00" (constrain clamps to the max valid hour)
|
|
25
36
|
* @example setTime("12:00:00", { hour: 25 }, { overflow: "reject" }) // ""
|
|
26
37
|
* @example setTime("12:00:00", {}) // "12:00:00" (empty fields object is a no-op)
|
|
38
|
+
* @example setTime("12:00:00", { hour: 9.5 }) // "" (not truncated)
|
|
27
39
|
* @example setTime("invalid", { hour: 9 }) // ""
|
|
28
40
|
*/
|
|
29
41
|
export function setTime(value, fields, options) {
|
|
@@ -34,12 +46,15 @@ export function setTime(value, fields, options) {
|
|
|
34
46
|
return "";
|
|
35
47
|
try {
|
|
36
48
|
const time = Temporal.PlainTime.from(value);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
49
|
+
const set = readSetFields(fields, TIME_FIELDS);
|
|
50
|
+
if (set === null)
|
|
51
|
+
return "";
|
|
52
|
+
// Only the values readSetFields checked reach Temporal. An empty result sets nothing: a
|
|
53
|
+
// no-op here, where Temporal's with() would throw.
|
|
54
|
+
if (Object.keys(set).length === 0)
|
|
40
55
|
return time.toString();
|
|
41
56
|
return time
|
|
42
|
-
.with(
|
|
57
|
+
.with(set, { overflow: resolveOverflow(options?.overflow) })
|
|
43
58
|
.toString();
|
|
44
59
|
}
|
|
45
60
|
catch {
|
|
@@ -7,7 +7,7 @@ import type { FractionalDigit } from "../../types/index.js";
|
|
|
7
7
|
* import { StartOfTimeUnit } from "@northguild/gmt/plain";
|
|
8
8
|
* const unit: StartOfTimeUnit = "hours";
|
|
9
9
|
*/
|
|
10
|
-
export type StartOfTimeUnit = Temporal.SmallestUnit<Temporal.TimeUnit
|
|
10
|
+
export type StartOfTimeUnit = Temporal.SmallestUnit<"day" | Temporal.TimeUnit>;
|
|
11
11
|
/**
|
|
12
12
|
* Return the start of the specified time `unit` for a given ISO 8601 time string.
|
|
13
13
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
-
import { calendarSystemOfDateValue, formatDateInCalendar,
|
|
3
|
+
import { calendarSystemOfDateValue, formatDateInCalendar, parseCalendarDateValue, plainDateAdd, readDurationUnits, resolveOverflow, } from "../../internal/index.js";
|
|
4
4
|
import { isValidCalendarDate, isValidDateDurationUnit } from "../validate/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
6
6
|
/**
|
|
@@ -30,11 +30,8 @@ export function subtractDate(value, units, options) {
|
|
|
30
30
|
return "";
|
|
31
31
|
}
|
|
32
32
|
const validDate = isValidCalendarDate(value);
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
Object.keys(units).every(isValidDateDurationUnit);
|
|
36
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
37
|
-
if (!validDate || !validUnits || !validAmounts) {
|
|
33
|
+
const amounts = readDurationUnits(units, isValidDateDurationUnit);
|
|
34
|
+
if (!validDate || amounts === null) {
|
|
38
35
|
return "";
|
|
39
36
|
}
|
|
40
37
|
try {
|
|
@@ -43,7 +40,7 @@ export function subtractDate(value, units, options) {
|
|
|
43
40
|
return "";
|
|
44
41
|
}
|
|
45
42
|
const date = parseCalendarDateValue(value);
|
|
46
|
-
const result = plainDateAdd(date, Temporal.Duration.from(
|
|
43
|
+
const result = plainDateAdd(date, Temporal.Duration.from(amounts).negated(), resolveOverflow(options?.overflow));
|
|
47
44
|
return formatDateInCalendar(result, calendar);
|
|
48
45
|
}
|
|
49
46
|
catch {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
-
import {
|
|
3
|
+
import { readDurationUnits, resolveOverflow } from "../../internal/index.js";
|
|
4
4
|
import { isValidDateTime, isValidDateTimeDurationUnit } from "../validate/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
6
6
|
/**
|
|
@@ -24,17 +24,14 @@ export function subtractDateTime(value, units, options) {
|
|
|
24
24
|
return "";
|
|
25
25
|
}
|
|
26
26
|
const validDateTime = isValidDateTime(value);
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
Object.keys(units).every(isValidDateTimeDurationUnit);
|
|
30
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
31
|
-
if (!validDateTime || !validUnits || !validAmounts) {
|
|
27
|
+
const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
|
|
28
|
+
if (!validDateTime || amounts === null) {
|
|
32
29
|
return "";
|
|
33
30
|
}
|
|
34
31
|
try {
|
|
35
32
|
const dateTime = Temporal.PlainDateTime.from(value);
|
|
36
33
|
return dateTime
|
|
37
|
-
.subtract(
|
|
34
|
+
.subtract(amounts, { overflow: resolveOverflow(options?.overflow) })
|
|
38
35
|
.toString();
|
|
39
36
|
}
|
|
40
37
|
catch {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// fallow-ignore-file code-duplication -- sibling variant keeps its own guard, parse and try/catch, by design
|
|
2
2
|
import { Temporal } from "@js-temporal/polyfill";
|
|
3
|
-
import {
|
|
3
|
+
import { readDurationUnits } from "../../internal/index.js";
|
|
4
4
|
import { isValidTime, isValidTimeDurationUnit } from "../validate/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* Return a PlainTime ISO string with `units` subtracted from `value`.
|
|
@@ -22,16 +22,13 @@ import { isValidTime, isValidTimeDurationUnit } from "../validate/index.js";
|
|
|
22
22
|
export function subtractTime(value, units) {
|
|
23
23
|
try {
|
|
24
24
|
const validTime = isValidTime(value);
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
Object.keys(units).every(isValidTimeDurationUnit);
|
|
28
|
-
const validAmounts = validUnits && Object.values(units).every(isValidAmount);
|
|
29
|
-
if (!validTime || !validUnits || !validAmounts) {
|
|
25
|
+
const amounts = readDurationUnits(units, isValidTimeDurationUnit);
|
|
26
|
+
if (!validTime || amounts === null) {
|
|
30
27
|
return "";
|
|
31
28
|
}
|
|
32
29
|
try {
|
|
33
30
|
const time = Temporal.PlainTime.from(value);
|
|
34
|
-
return time.subtract(
|
|
31
|
+
return time.subtract(amounts).toString();
|
|
35
32
|
}
|
|
36
33
|
catch {
|
|
37
34
|
return "";
|