@northguild/gmt 1.17.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 -2480
- package/dist/calendar/calculate/bucketRange.d.ts +12 -4
- package/dist/calendar/calculate/bucketRange.js +20 -63
- package/dist/calendar/calculate/floorToZone.d.ts +14 -4
- package/dist/calendar/calculate/floorToZone.js +18 -9
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
- package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
- package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
- package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
- package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
- package/dist/calendar/calculate/getOrdinalDate.js +2 -3
- package/dist/calendar/calculate/getQuarter.d.ts +21 -9
- package/dist/calendar/calculate/getQuarter.js +8 -12
- package/dist/calendar/hours/addOperatingTime.d.ts +59 -0
- package/dist/calendar/hours/addOperatingTime.js +65 -0
- package/dist/calendar/hours/index.d.ts +7 -0
- package/dist/calendar/hours/index.js +7 -0
- package/dist/calendar/hours/isOpenAt.d.ts +45 -0
- package/dist/calendar/hours/isOpenAt.js +50 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +55 -0
- package/dist/calendar/hours/nextCloseAt.js +57 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +51 -0
- package/dist/calendar/hours/nextOpenAt.js +53 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +48 -0
- package/dist/calendar/hours/operatingIntervals.js +57 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +45 -0
- package/dist/calendar/hours/operatingTimeBetween.js +54 -0
- package/dist/calendar/hours/recurringWindows.d.ts +68 -0
- package/dist/calendar/hours/recurringWindows.js +88 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- 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/totalDuration.d.ts +73 -0
- package/dist/duration/calculate/{durationAs.js → totalDuration.js} +29 -27
- package/dist/duration/calculate/totalUnits.d.ts +49 -0
- package/dist/duration/calculate/totalUnits.js +73 -0
- package/dist/duration/compare/compareDurations.d.ts +13 -7
- package/dist/duration/compare/compareDurations.js +4 -7
- package/dist/duration/format/formatDuration.d.ts +16 -4
- package/dist/duration/format/formatDuration.js +4 -5
- package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
- package/dist/duration/normalize/normalizeDuration.js +6 -15
- package/dist/duration/parse/parseDuration.d.ts +21 -3
- package/dist/duration/parse/parseDuration.js +1 -3
- 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 +7 -1
- package/dist/instant/convert/fromOffsetInstant.js +9 -2
- package/dist/instant/convert/resolveLocal.d.ts +18 -8
- package/dist/instant/convert/resolveLocal.js +21 -17
- package/dist/instant/convert/toOffsetInstant.d.ts +33 -16
- package/dist/instant/convert/toOffsetInstant.js +28 -13
- 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/billingTimeline.d.ts +31 -11
- package/dist/intermodal/calculate/billingTimeline.js +2 -2
- package/dist/intermodal/calculate/chargeableDays.d.ts +19 -11
- package/dist/intermodal/calculate/chargeableDays.js +13 -10
- package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
- package/dist/intermodal/calculate/demurrageClock.js +7 -7
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +12 -4
- package/dist/intermodal/calculate/freeTimeExpiry.js +19 -8
- 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.d.ts +5 -0
- package/dist/internal/businessCalendar.js +9 -10
- package/dist/internal/cycleFieldValue.d.ts +6 -4
- package/dist/internal/cycleFieldValue.js +6 -4
- package/dist/internal/daylightTime.d.ts +33 -0
- package/dist/internal/daylightTime.js +164 -0
- package/dist/internal/durationUntilString.js +4 -3
- 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 +4 -3
- package/dist/internal/epochNanoseconds.d.ts +2 -0
- package/dist/internal/epochNanoseconds.js +2 -0
- package/dist/internal/exactDuration.d.ts +37 -0
- package/dist/internal/exactDuration.js +64 -0
- package/dist/internal/exactMoment.d.ts +72 -0
- package/dist/internal/exactMoment.js +114 -0
- package/dist/internal/fiscalCalendar.d.ts +4 -3
- package/dist/internal/fiscalCalendar.js +4 -3
- package/dist/internal/formatCalendarDays.d.ts +2 -2
- package/dist/internal/formatRelativeDuration.d.ts +21 -1
- package/dist/internal/formatRelativeDuration.js +47 -7
- package/dist/internal/freeTimeLedger.d.ts +5 -0
- package/dist/internal/freeTimeLedger.js +11 -2
- package/dist/internal/index.d.ts +12 -4
- package/dist/internal/index.js +16 -4
- package/dist/internal/instantFormatOptions.js +2 -1
- package/dist/internal/instantNanoseconds.d.ts +75 -9
- package/dist/internal/instantNanoseconds.js +192 -11
- 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/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/maxPieces.js +2 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +5 -2
- package/dist/internal/normalizeTimeZone.js +5 -2
- package/dist/internal/operatingSchedule.d.ts +138 -0
- package/dist/internal/operatingSchedule.js +756 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +12 -5
- package/dist/internal/patternToken.js +59 -25
- package/dist/internal/plainDateUntil.js +10 -6
- package/dist/internal/punctuality.d.ts +38 -0
- package/dist/internal/punctuality.js +59 -0
- package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
- package/dist/internal/readDateTimeFormatOptions.js +93 -0
- 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/resolveDurationRelativeTo.d.ts +4 -0
- package/dist/internal/resolveDurationRelativeTo.js +11 -1
- package/dist/internal/resolveRelativeRounding.d.ts +17 -6
- package/dist/internal/resolveRelativeRounding.js +27 -7
- package/dist/internal/resolveRelativeUnit.d.ts +30 -0
- package/dist/internal/resolveRelativeUnit.js +40 -0
- package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
- package/dist/internal/resolveUnixIntervalPair.js +11 -7
- package/dist/internal/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- package/dist/internal/startOrEndOfUnix.d.ts +2 -1
- package/dist/internal/startOrEndOfUnix.js +9 -6
- package/dist/internal/startOrEndOfZoned.js +2 -3
- package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
- package/dist/internal/temporalCompat/capabilities.js +35 -3
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/repros.d.ts +1 -1
- package/dist/internal/temporalCompat/repros.js +157 -0
- package/dist/internal/timestampEvents.d.ts +32 -0
- package/dist/internal/timestampEvents.js +76 -0
- 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/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- package/dist/internal/zonedNowUnitValue.d.ts +7 -4
- package/dist/internal/zonedNowUnitValue.js +8 -4
- package/dist/internal/zonedTransitionSearch.d.ts +27 -0
- package/dist/internal/zonedTransitionSearch.js +218 -0
- package/dist/internal/zonedWallClock.d.ts +21 -7
- package/dist/internal/zonedWallClock.js +87 -18
- package/dist/internal/zonedWallClockDifference.js +4 -4
- package/dist/internal/zonedWallClockOperations.d.ts +31 -15
- package/dist/internal/zonedWallClockOperations.js +93 -43
- package/dist/interval/validate/isValidInterval.d.ts +6 -3
- package/dist/interval/validate/isValidInterval.js +6 -3
- package/dist/plain/calculate/addDate.d.ts +11 -8
- package/dist/plain/calculate/addDate.js +9 -15
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +5 -11
- package/dist/plain/calculate/addTime.js +4 -7
- package/dist/plain/calculate/cycleDate.d.ts +16 -7
- package/dist/plain/calculate/cycleDate.js +3 -7
- package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
- package/dist/plain/calculate/cycleDateTime.js +1 -4
- package/dist/plain/calculate/cycleTime.d.ts +10 -5
- package/dist/plain/calculate/cycleTime.js +3 -5
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDate.js +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.js +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +8 -3
- package/dist/plain/calculate/endOfDate.js +1 -3
- package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
- package/dist/plain/calculate/endOfDateTime.js +1 -5
- package/dist/plain/calculate/endOfTime.d.ts +9 -3
- package/dist/plain/calculate/endOfTime.js +1 -2
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
- package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
- package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
- package/dist/plain/calculate/getWeekOfMonth.js +7 -4
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
- package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
- package/dist/plain/calculate/getWeeksInMonth.js +5 -2
- package/dist/plain/calculate/nextWeekday.d.ts +7 -3
- package/dist/plain/calculate/nextWeekday.js +1 -3
- package/dist/plain/calculate/previousWeekday.d.ts +7 -3
- package/dist/plain/calculate/previousWeekday.js +1 -3
- package/dist/plain/calculate/roundDate.d.ts +20 -7
- package/dist/plain/calculate/roundDate.js +3 -10
- package/dist/plain/calculate/roundDateTime.d.ts +22 -8
- package/dist/plain/calculate/roundDateTime.js +3 -11
- package/dist/plain/calculate/roundTime.d.ts +20 -4
- package/dist/plain/calculate/roundTime.js +3 -7
- package/dist/plain/calculate/setDate.d.ts +27 -8
- package/dist/plain/calculate/setDate.js +28 -12
- package/dist/plain/calculate/setDateTime.d.ts +23 -8
- package/dist/plain/calculate/setDateTime.js +23 -12
- package/dist/plain/calculate/setTime.d.ts +23 -7
- package/dist/plain/calculate/setTime.js +25 -12
- package/dist/plain/calculate/startOfDate.d.ts +8 -2
- package/dist/plain/calculate/startOfDate.js +1 -2
- package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
- package/dist/plain/calculate/startOfDateTime.js +1 -2
- package/dist/plain/calculate/startOfTime.d.ts +9 -2
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +5 -11
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +5 -11
- package/dist/plain/calculate/subtractTime.js +4 -7
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
- package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
- package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
- package/dist/plain/compare/areDatesEqualBy.js +8 -6
- package/dist/plain/compare/isBetweenDate.d.ts +13 -2
- package/dist/plain/compare/isBetweenDate.js +4 -4
- package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenDateTime.js +4 -4
- package/dist/plain/compare/isBetweenTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenTime.js +4 -4
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +1 -1
- package/dist/plain/compare/isThisUnit.js +1 -1
- package/dist/plain/format/formatCalendar.d.ts +21 -14
- package/dist/plain/format/formatCalendar.js +23 -17
- package/dist/plain/format/formatDate.js +5 -3
- package/dist/plain/format/formatDateRange.js +4 -2
- package/dist/plain/format/formatDateTime.js +4 -2
- package/dist/plain/format/formatDateTimeRange.js +4 -2
- package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
- package/dist/plain/format/formatDateTimeToParts.js +10 -6
- package/dist/plain/format/formatDateToParts.d.ts +13 -2
- package/dist/plain/format/formatDateToParts.js +8 -4
- package/dist/plain/format/formatRelativeDate.d.ts +16 -3
- package/dist/plain/format/formatRelativeDate.js +28 -16
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +10 -6
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +23 -14
- 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/formatTime.js +4 -2
- 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/intervalDifferenceDate.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
- package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDate.js +1 -3
- package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
- package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
- package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDate.js +2 -0
- package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
- package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtTime.js +2 -0
- package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
- package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.js +2 -2
- package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.js +2 -2
- package/dist/plain/interval/intervalXorDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.js +2 -2
- package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.js +2 -2
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
- package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
- package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
- package/dist/plain/map/mapDatesInRange.d.ts +8 -4
- package/dist/plain/map/mapDatesInRange.js +1 -4
- package/dist/plain/parse/index.d.ts +1 -1
- package/dist/plain/parse/index.js +1 -1
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +25 -9
- package/dist/plain/parse/parseDateTimeWithPattern.js +29 -11
- package/dist/plain/parse/parseDateWithPattern.d.ts +26 -9
- package/dist/plain/parse/parseDateWithPattern.js +30 -11
- 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.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +11 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDate.js +8 -4
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +14 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +8 -4
- package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDate.js +2 -6
- package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
- 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/isValidDateRange.d.ts +19 -4
- package/dist/plain/validate/isValidDateRange.js +1 -4
- package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidDateTimeRange.js +2 -5
- package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
- package/dist/plain/validate/isValidSqlDateTime.js +36 -0
- package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidTimeRange.js +2 -5
- package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
- package/dist/precision/convert/fromExcelSerial.js +4 -5
- package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
- package/dist/precision/convert/fromNanoseconds.js +9 -3
- package/dist/precision/convert/toExcelSerial.d.ts +9 -3
- package/dist/precision/convert/toExcelSerial.js +3 -4
- package/dist/precision/convert/toNanoseconds.d.ts +11 -6
- package/dist/precision/convert/toNanoseconds.js +11 -6
- package/dist/precision/validate/isValidInstant.d.ts +12 -3
- package/dist/precision/validate/isValidInstant.js +12 -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/span/calculate/spanMs.d.ts +10 -4
- package/dist/span/calculate/spanMs.js +10 -4
- package/dist/span/calculate/spanNs.d.ts +10 -4
- package/dist/span/calculate/spanNs.js +10 -4
- package/dist/span/validate/isValidSpan.d.ts +8 -3
- package/dist/span/validate/isValidSpan.js +8 -3
- package/dist/transport/calculate/bestAvailable.d.ts +47 -0
- package/dist/transport/calculate/bestAvailable.js +76 -0
- package/dist/transport/calculate/crossingTime.d.ts +63 -0
- package/dist/transport/calculate/crossingTime.js +81 -0
- package/dist/transport/calculate/cutoffAt.d.ts +95 -0
- package/dist/transport/calculate/cutoffAt.js +211 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +75 -0
- package/dist/transport/calculate/cutoffSchedule.js +73 -0
- package/dist/transport/calculate/dwellTime.d.ts +22 -8
- package/dist/transport/calculate/dwellTime.js +18 -9
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +8 -0
- package/dist/transport/calculate/index.js +8 -0
- package/dist/transport/calculate/nextDeparture.d.ts +78 -0
- package/dist/transport/calculate/nextDeparture.js +131 -0
- package/dist/transport/calculate/punctualityRate.d.ts +42 -0
- package/dist/transport/calculate/punctualityRate.js +59 -0
- package/dist/transport/calculate/scheduleDelivery.d.ts +158 -0
- package/dist/transport/calculate/scheduleDelivery.js +305 -0
- package/dist/transport/calculate/transitTime.d.ts +21 -3
- package/dist/transport/calculate/transitTime.js +29 -46
- package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
- package/dist/transport/compare/classifyPunctuality.js +64 -0
- package/dist/transport/compare/index.d.ts +4 -0
- package/dist/transport/compare/index.js +4 -0
- package/dist/transport/compare/isPastCutoff.d.ts +33 -0
- package/dist/transport/compare/isPastCutoff.js +48 -0
- package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
- package/dist/transport/compare/scheduleDeviation.js +53 -0
- package/dist/transport/compare/timeToCutoff.d.ts +31 -0
- package/dist/transport/compare/timeToCutoff.js +47 -0
- package/dist/transport/convert/etaAtZone.d.ts +13 -1
- package/dist/transport/convert/etaAtZone.js +15 -5
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.js +1 -0
- package/dist/types/business-calendar.d.ts +20 -14
- package/dist/types/calendar-options.d.ts +15 -3
- package/dist/types/date-cycle-field.d.ts +5 -0
- package/dist/types/date-duration-unit.d.ts +4 -0
- package/dist/types/date-time-cycle-field.d.ts +4 -0
- package/dist/types/date-time-duration-units.d.ts +4 -0
- package/dist/types/date-time-unit.d.ts +4 -0
- package/dist/types/date-unit.d.ts +4 -0
- package/dist/types/disambiguation.d.ts +8 -0
- package/dist/types/duration-relative-to.d.ts +8 -0
- package/dist/types/duration-string-options.d.ts +28 -0
- package/dist/types/duty.d.ts +777 -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/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +22 -11
- package/dist/types/index.d.ts +7 -1
- package/dist/types/index.js +7 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +72 -0
- package/dist/types/operating-schedule.js +0 -0
- package/dist/types/overflow.d.ts +6 -0
- package/dist/types/relative-rounding-method.d.ts +6 -0
- package/dist/types/relative-time-options.d.ts +33 -5
- package/dist/types/rounding-options.d.ts +27 -0
- package/dist/types/time-cycle-field.d.ts +4 -0
- package/dist/types/time-duration-unit.d.ts +4 -0
- package/dist/types/time-unit.d.ts +4 -0
- package/dist/types/transport-timestamps.d.ts +54 -0
- package/dist/types/transport-timestamps.js +0 -0
- 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 +28 -5
- package/dist/unix/calculate/addUnix.js +15 -16
- package/dist/unix/calculate/diffUnix.d.ts +21 -3
- package/dist/unix/calculate/diffUnix.js +12 -9
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +21 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +11 -8
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/endOfUnix.d.ts +29 -4
- package/dist/unix/calculate/endOfUnix.js +8 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +27 -4
- package/dist/unix/calculate/isBetweenUnix.js +7 -9
- package/dist/unix/calculate/roundUnix.d.ts +39 -3
- package/dist/unix/calculate/roundUnix.js +16 -12
- package/dist/unix/calculate/setUnix.d.ts +58 -12
- package/dist/unix/calculate/setUnix.js +37 -25
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +21 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +7 -3
- package/dist/unix/calculate/startOfUnix.d.ts +29 -4
- package/dist/unix/calculate/startOfUnix.js +8 -4
- package/dist/unix/calculate/subtractUnix.d.ts +27 -5
- package/dist/unix/calculate/subtractUnix.js +14 -16
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +33 -7
- package/dist/unix/compare/areUnixEqualBy.js +20 -9
- package/dist/unix/compare/isAfterUnix.d.ts +7 -1
- package/dist/unix/compare/isAfterUnix.js +1 -1
- package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
- package/dist/unix/compare/isBeforeUnix.js +1 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +7 -8
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +7 -8
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +17 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +7 -8
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +14 -5
- package/dist/unix/convert/convertUnixToZoned.js +8 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +31 -19
- package/dist/unix/format/formatCalendarUnix.js +10 -6
- package/dist/unix/format/formatRelativeUnix.d.ts +62 -5
- package/dist/unix/format/formatRelativeUnix.js +16 -10
- package/dist/unix/format/formatUnix.d.ts +29 -6
- package/dist/unix/format/formatUnix.js +12 -7
- 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/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- 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 +23 -5
- package/dist/unix/interval/intervalCountUnix.js +9 -5
- package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
- package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
- package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +41 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +18 -12
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +24 -6
- package/dist/unix/interval/intervalLengthUnix.js +10 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +21 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +11 -8
- package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
- package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
- package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
- package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +50 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +33 -22
- package/dist/unix/parse/parseDateFromUnix.d.ts +15 -2
- package/dist/unix/parse/parseDateFromUnix.js +4 -5
- package/dist/unix/parse/parseDayFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +15 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +3 -3
- package/dist/unix/parse/parseHourFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +16 -2
- package/dist/unix/parse/parseTimeFromUnix.js +5 -5
- package/dist/unix/parse/parseUnitFromUnix.d.ts +29 -4
- package/dist/unix/parse/parseUnitFromUnix.js +23 -17
- package/dist/unix/parse/parseWeekFromUnix.d.ts +24 -7
- package/dist/unix/parse/parseWeekFromUnix.js +7 -11
- package/dist/unix/parse/parseYearFromUnix.d.ts +20 -3
- package/dist/unix/parse/parseYearFromUnix.js +6 -3
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +5 -11
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +16 -3
- package/dist/utc/calculate/endOfUtc.js +2 -3
- package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
- package/dist/utc/calculate/isBetweenUtc.js +4 -4
- package/dist/utc/calculate/roundUtc.d.ts +26 -9
- package/dist/utc/calculate/roundUtc.js +3 -12
- package/dist/utc/calculate/setUtc.d.ts +23 -7
- package/dist/utc/calculate/setUtc.js +23 -12
- package/dist/utc/calculate/startOfUtc.d.ts +15 -2
- package/dist/utc/calculate/startOfUtc.js +1 -2
- package/dist/utc/calculate/subtractUtc.d.ts +7 -4
- package/dist/utc/calculate/subtractUtc.js +5 -11
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +14 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +12 -10
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +15 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +14 -16
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +11 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +9 -9
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
- package/dist/utc/convert/convertUtcToZoned.js +5 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +23 -8
- package/dist/utc/format/formatCalendarUtc.js +14 -7
- package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +8 -8
- package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +8 -8
- package/dist/utc/format/formatRelativeUtc.d.ts +38 -10
- package/dist/utc/format/formatRelativeUtc.js +22 -16
- package/dist/utc/format/formatUtc.d.ts +22 -15
- package/dist/utc/format/formatUtc.js +12 -8
- 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/intervalDifferenceUtc.d.ts +6 -0
- package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
- package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
- package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
- package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
- package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
- package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.js +2 -2
- package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/index.d.ts +1 -1
- package/dist/utc/parse/index.js +1 -1
- package/dist/utc/parse/parseDateFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDateFromUtc.js +3 -5
- package/dist/utc/parse/parseDayFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayFromUtc.js +3 -5
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +5 -7
- package/dist/utc/parse/parseHourFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseHourFromUtc.js +3 -5
- 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 +9 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +3 -5
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +3 -5
- package/dist/utc/parse/parseMonthFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseMonthFromUtc.js +3 -5
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +3 -5
- package/dist/utc/parse/parseSecondFromUtc.d.ts +9 -3
- package/dist/utc/parse/parseSecondFromUtc.js +3 -5
- package/dist/utc/parse/parseTimeFromUtc.d.ts +11 -3
- package/dist/utc/parse/parseTimeFromUtc.js +7 -7
- package/dist/utc/parse/parseUnitFromUtc.d.ts +25 -6
- package/dist/utc/parse/parseUnitFromUtc.js +14 -10
- package/dist/utc/parse/parseWeekFromUtc.d.ts +20 -10
- package/dist/utc/parse/parseWeekFromUtc.js +8 -14
- package/dist/utc/parse/parseYearFromUtc.d.ts +13 -5
- package/dist/utc/parse/parseYearFromUtc.js +9 -8
- 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/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
- package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +10 -20
- package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
- package/dist/zoned/calculate/cycleZoned.js +1 -8
- package/dist/zoned/calculate/diffZoned.d.ts +1 -1
- package/dist/zoned/calculate/diffZoned.js +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
- package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
- package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
- package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
- package/dist/zoned/calculate/roundZoned.d.ts +21 -4
- package/dist/zoned/calculate/roundZoned.js +3 -7
- package/dist/zoned/calculate/setZoned.d.ts +44 -13
- package/dist/zoned/calculate/setZoned.js +30 -21
- package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
- package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
- package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
- package/dist/zoned/calculate/startOfZoned.js +1 -3
- package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
- package/dist/zoned/calculate/subtractZoned.js +10 -20
- package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
- package/dist/zoned/compare/areZonedEqualBy.js +7 -5
- package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
- package/dist/zoned/compare/isBetweenZoned.js +4 -3
- package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
- package/dist/zoned/compare/isInDaylightSaving.js +40 -44
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +21 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +9 -11
- package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
- package/dist/zoned/convert/convertZonedToUnix.js +2 -4
- package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
- package/dist/zoned/convert/convertZonedToZoned.js +5 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +15 -10
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +9 -5
- package/dist/zoned/format/formatRfc2822.d.ts +2 -2
- package/dist/zoned/format/formatRfc2822.js +2 -2
- package/dist/zoned/format/formatRfc3339.d.ts +2 -3
- package/dist/zoned/format/formatRfc3339.js +2 -3
- package/dist/zoned/format/formatTimeZoneName.d.ts +16 -3
- package/dist/zoned/format/formatTimeZoneName.js +9 -4
- package/dist/zoned/format/formatZonedDateTime.js +2 -1
- package/dist/zoned/format/formatZonedRange.js +2 -1
- package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
- package/dist/zoned/format/formatZonedToParts.js +8 -5
- package/dist/zoned/get/getDstTransitions.d.ts +11 -10
- package/dist/zoned/get/getDstTransitions.js +21 -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 +13 -2
- package/dist/zoned/get/getTimeZoneOffset.js +22 -6
- 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 +18 -2
- package/dist/zoned/get/getZonedNow.js +17 -4
- 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/intervalDifferenceZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
- package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
- package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
- package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
- package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
- package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
- package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
- package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
- package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +13 -4
- package/dist/zoned/parse/parseUnitFromZoned.js +6 -4
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
- package/dist/zoned/parse/parseYearFromZoned.js +6 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +45 -12
- package/dist/zoned/validate/hasDaylightSaving.js +54 -32
- 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/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
- package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
- package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
- package/dist/zoned/validate/isValidZonedRange.js +1 -4
- package/package.json +67 -5
- package/skills/gmt-arithmetic/SKILL.md +99 -12
- package/skills/gmt-basics/SKILL.md +64 -13
- package/skills/gmt-integration/SKILL.md +33 -13
- package/skills/gmt-timezone/SKILL.md +265 -31
- package/dist/duration/calculate/durationAs.d.ts +0 -62
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/internal/unixZonedDateTime.d.ts +0 -22
- package/dist/internal/unixZonedDateTime.js +0 -32
- package/dist/internal/utcZonedDateTime.d.ts +0 -16
- package/dist/internal/utcZonedDateTime.js +0 -28
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → duty.js} +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import { durationTotal, readDurationUnits } from "../../internal/index.js";
|
|
3
|
+
import { resolveDurationUnit } from "../../internal/resolveDurationUnit.js";
|
|
4
|
+
import { isValidTimeDurationUnit } from "../../plain/validate/index.js";
|
|
5
|
+
/** Whether `unit` has an exact length: `"days"` (24 hours with no anchor) or a time unit. */
|
|
6
|
+
const isExactDurationUnit = (unit) => unit === "days" || isValidTimeDurationUnit(unit);
|
|
7
|
+
/**
|
|
8
|
+
* Express an amount written as a unit object, such as `{ minutes: 15 }`, as a single fractional
|
|
9
|
+
* total in one unit.
|
|
10
|
+
*
|
|
11
|
+
* - Uses Temporal.Duration.from and .total: every field is converted, so
|
|
12
|
+
* totalUnits({ days: 1, hours: 12 }, "seconds") is 129600.
|
|
13
|
+
* - Which function to use: `totalUnits` takes a unit object. `totalDuration` takes an ISO 8601
|
|
14
|
+
* duration string (`"PT15M"`). `durationFromUnits` turns a unit object into the duration string
|
|
15
|
+
* that the other duration functions take.
|
|
16
|
+
* - Takes exact units only: days, hours, minutes, seconds, milliseconds, microseconds and
|
|
17
|
+
* nanoseconds. A day is 24 hours, as Temporal's `Duration.prototype.total` reads a day when it
|
|
18
|
+
* has no `relativeTo`. For a day in a time zone, which can be 23 or 25 hours across a clock
|
|
19
|
+
* change, use `totalDuration` with a zoned `relativeTo`.
|
|
20
|
+
* - A year, a month or a week returns null, as a key and as `unit`: Temporal gives them no length
|
|
21
|
+
* without a date to measure from. Write a week as `{ days: 7 }`. For a calendar amount, build
|
|
22
|
+
* the string with `durationFromUnits` and pass it to `totalDuration` with `relativeTo`.
|
|
23
|
+
* - The result is fractional, not rounded: totalUnits({ hours: 36 }, "days") is 1.5. It is a
|
|
24
|
+
* JavaScript number, so a total past 2^53 is the nearest double.
|
|
25
|
+
* - Every key is a unit name in the plural, and every amount is a whole finite number. All
|
|
26
|
+
* nonzero amounts share one sign, as Temporal requires of a duration. A unit set to `undefined`
|
|
27
|
+
* is absent, as Temporal reads it.
|
|
28
|
+
* - An unknown key returns null, even beside a valid one. Temporal on its own ignores an unknown
|
|
29
|
+
* key, so a misspelt `{ minutes: 15, hour: 1 }` would total 900 with no warning.
|
|
30
|
+
* - `unit` accepts the plural or singular name (`"seconds"` or `"second"`), as Temporal does.
|
|
31
|
+
* - Returns null on an object with no unit, a non-object `units` (a duration string included), an
|
|
32
|
+
* invalid amount, an amount past Temporal's duration range, or an invalid `unit`.
|
|
33
|
+
*
|
|
34
|
+
* @param units Partial<Record<ExactDurationUnit, number>> object holding the amount to total
|
|
35
|
+
* @param unit ExactDurationUnit to total into ("days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds", or the singular name)
|
|
36
|
+
* @returns the fractional total in `unit`, or null on invalid input
|
|
37
|
+
*
|
|
38
|
+
* @example totalUnits({ minutes: 15 }, "seconds") // 900
|
|
39
|
+
* @example totalUnits({ days: 30 }, "seconds") // 2592000
|
|
40
|
+
* @example totalUnits({ days: 1, hours: 12 }, "seconds") // 129600
|
|
41
|
+
* @example totalUnits({ hours: 36 }, "days") // 1.5
|
|
42
|
+
* @example totalUnits({ minutes: -90 }, "hours") // -1.5
|
|
43
|
+
* @example totalUnits({ seconds: 10 }, "millisecond") // 10000 (singular unit name)
|
|
44
|
+
* @example totalUnits({ minutes: 0 }, "seconds") // 0
|
|
45
|
+
* @example totalUnits({ minutes: 15, hours: undefined }, "seconds") // 900 (an undefined unit is absent)
|
|
46
|
+
* @example totalUnits({ weeks: 1 }, "days") // null (a week has no exact length; write { days: 7 })
|
|
47
|
+
* @example totalUnits({ days: 7 }, "weeks") // null (a week has no exact length)
|
|
48
|
+
* @example totalUnits({ minutes: 15, hour: 1 }, "seconds") // null (unknown key "hour")
|
|
49
|
+
* @example totalUnits({ minutes: 1.5 }, "seconds") // null (fractional amount)
|
|
50
|
+
* @example totalUnits({ hours: 1, minutes: -30 }, "seconds") // null (mixed signs)
|
|
51
|
+
* @example totalUnits({}, "seconds") // null
|
|
52
|
+
* @example totalUnits("PT15M", "seconds") // null (a duration string goes to totalDuration)
|
|
53
|
+
*/
|
|
54
|
+
export function totalUnits(units, unit) {
|
|
55
|
+
try {
|
|
56
|
+
const resolvedUnit = resolveDurationUnit(unit);
|
|
57
|
+
const amounts = readDurationUnits(units, isExactDurationUnit);
|
|
58
|
+
if (!isExactDurationUnit(resolvedUnit) || amounts === null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
return durationTotal(Temporal.Duration.from(amounts), resolvedUnit);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Never throws (Core Rule 3): a hostile
|
|
70
|
+
// argument is invalid input, not an exception.
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -5,16 +5,13 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
5
5
|
* - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
|
|
6
6
|
* - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
|
|
7
7
|
* "PT24H" absent a `relativeTo`.
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
* compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
8
|
+
* - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
|
|
9
|
+
* Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
11
10
|
* (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
|
|
12
11
|
* so calendar-unit durations are comparable here even though they cannot be combined there.
|
|
13
|
-
* `
|
|
12
|
+
* `totalDuration` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
|
|
14
13
|
* - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
|
|
15
14
|
* than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
|
|
16
|
-
* - It matters for non-calendar units too when it names a zoned instant — across a DST
|
|
17
|
-
* spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
|
|
18
15
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
19
16
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
20
17
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -37,7 +34,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
37
34
|
*
|
|
38
35
|
* @param a ISO 8601 duration string
|
|
39
36
|
* @param b ISO 8601 duration string
|
|
40
|
-
* @param options
|
|
37
|
+
* @param options The anchor calendar units are measured from
|
|
41
38
|
* @returns -1, 0, or 1, or null on invalid input
|
|
42
39
|
*
|
|
43
40
|
* @example compareDurations("PT1H", "PT30M") // 1
|
|
@@ -56,5 +53,14 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
56
53
|
* @example compareDurations("P1M", "P30D", { relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // 0 (a date-time without a zone reads as its date, as Temporal reads relativeTo)
|
|
57
54
|
*/
|
|
58
55
|
export declare function compareDurations(a: string, b: string, options?: {
|
|
56
|
+
/**
|
|
57
|
+
* The date or zoned date-time both durations are measured from. It is required when either
|
|
58
|
+
* side has a year, month or week and the two differ. With a zoned value, days follow that
|
|
59
|
+
* zone's clock changes, so across a spring-forward transition `"P1D"` is 23 hours and
|
|
60
|
+
* compares shorter than `"PT24H"`.
|
|
61
|
+
*
|
|
62
|
+
* @defaultValue None. Days are 24 hours, and two different durations of which one has a
|
|
63
|
+
* year, month or week return `null`.
|
|
64
|
+
*/
|
|
59
65
|
relativeTo?: DurationRelativeTo;
|
|
60
66
|
}): number | null;
|
|
@@ -7,16 +7,13 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
7
7
|
* - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
|
|
8
8
|
* - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
|
|
9
9
|
* "PT24H" absent a `relativeTo`.
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
* compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
10
|
+
* - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
|
|
11
|
+
* Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
13
12
|
* (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
|
|
14
13
|
* so calendar-unit durations are comparable here even though they cannot be combined there.
|
|
15
|
-
* `
|
|
14
|
+
* `totalDuration` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
|
|
16
15
|
* - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
|
|
17
16
|
* than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
|
|
18
|
-
* - It matters for non-calendar units too when it names a zoned instant — across a DST
|
|
19
|
-
* spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
|
|
20
17
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
21
18
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
22
19
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -39,7 +36,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
39
36
|
*
|
|
40
37
|
* @param a ISO 8601 duration string
|
|
41
38
|
* @param b ISO 8601 duration string
|
|
42
|
-
* @param options
|
|
39
|
+
* @param options The anchor calendar units are measured from
|
|
43
40
|
* @returns -1, 0, or 1, or null on invalid input
|
|
44
41
|
*
|
|
45
42
|
* @example compareDurations("PT1H", "PT30M") // 1
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
+
/** How `formatDuration` writes unit names, and whether it writes zero components. */
|
|
1
2
|
export interface FormatDurationOptions {
|
|
3
|
+
/**
|
|
4
|
+
* The length of each unit name, as the `unitDisplay` of `Intl.NumberFormat`: `"long"` ("90
|
|
5
|
+
* minutes"), `"short"` ("90 min") or `"narrow"` ("90m"). The components are joined as a long list
|
|
6
|
+
* ("1 day, 2 hours, and 30 minutes") for `"long"` and as a short list otherwise.
|
|
7
|
+
*
|
|
8
|
+
* @defaultValue `"long"`
|
|
9
|
+
*/
|
|
2
10
|
style?: "long" | "short" | "narrow";
|
|
11
|
+
/**
|
|
12
|
+
* Whether components that are zero are written. `false` leaves them out, so `"P1DT0H30M"`
|
|
13
|
+
* reads "1 day and 30 minutes"; `true` writes every unit from years to seconds.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue `false`
|
|
16
|
+
*/
|
|
3
17
|
zero?: boolean;
|
|
4
18
|
}
|
|
5
19
|
/**
|
|
@@ -16,10 +30,8 @@ export interface FormatDurationOptions {
|
|
|
16
30
|
* - To render fewer fraction digits, round the string first with parseDuration, e.g.
|
|
17
31
|
* { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
|
|
18
32
|
* function produced before (parseDuration's default roundingMode "trunc" drops the digits).
|
|
19
|
-
* - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
|
|
20
|
-
* minutes"). Pass { zero: true } to include them.
|
|
21
33
|
* - A zero-length duration (e.g. "PT0S") always renders its seconds component
|
|
22
|
-
* ("0 seconds") even
|
|
34
|
+
* ("0 seconds") even when zero components are left out, since omitting
|
|
23
35
|
* every component would otherwise produce "".
|
|
24
36
|
* - Negative durations render each component with a leading "-" (Temporal stores
|
|
25
37
|
* every field of a negative duration as a negative number).
|
|
@@ -27,7 +39,7 @@ export interface FormatDurationOptions {
|
|
|
27
39
|
*
|
|
28
40
|
* @param value ISO 8601 duration string
|
|
29
41
|
* @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
|
|
30
|
-
* @param options
|
|
42
|
+
* @param options How unit names are written, and whether zero components are shown
|
|
31
43
|
* @returns human-readable rendering of the duration, or "" on invalid input
|
|
32
44
|
*
|
|
33
45
|
* @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
3
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
3
4
|
const UNIT_TO_INTL = {
|
|
4
5
|
years: "year",
|
|
5
6
|
months: "month",
|
|
@@ -58,10 +59,8 @@ function exactSeconds(duration) {
|
|
|
58
59
|
* - To render fewer fraction digits, round the string first with parseDuration, e.g.
|
|
59
60
|
* { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
|
|
60
61
|
* function produced before (parseDuration's default roundingMode "trunc" drops the digits).
|
|
61
|
-
* - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
|
|
62
|
-
* minutes"). Pass { zero: true } to include them.
|
|
63
62
|
* - A zero-length duration (e.g. "PT0S") always renders its seconds component
|
|
64
|
-
* ("0 seconds") even
|
|
63
|
+
* ("0 seconds") even when zero components are left out, since omitting
|
|
65
64
|
* every component would otherwise produce "".
|
|
66
65
|
* - Negative durations render each component with a leading "-" (Temporal stores
|
|
67
66
|
* every field of a negative duration as a negative number).
|
|
@@ -69,7 +68,7 @@ function exactSeconds(duration) {
|
|
|
69
68
|
*
|
|
70
69
|
* @param value ISO 8601 duration string
|
|
71
70
|
* @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
|
|
72
|
-
* @param options
|
|
71
|
+
* @param options How unit names are written, and whether zero components are shown
|
|
73
72
|
* @returns human-readable rendering of the duration, or "" on invalid input
|
|
74
73
|
*
|
|
75
74
|
* @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
|
|
@@ -94,7 +93,7 @@ export function formatDuration(value, locale, options = {}) {
|
|
|
94
93
|
}
|
|
95
94
|
try {
|
|
96
95
|
const duration = Temporal.Duration.from(value);
|
|
97
|
-
const style = options.style
|
|
96
|
+
const style = optionOrDefault(options.style, "long");
|
|
98
97
|
const includeZero = options.zero ?? false;
|
|
99
98
|
const amounts = {
|
|
100
99
|
years: duration.years,
|
|
@@ -4,19 +4,9 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
4
4
|
* Roll an ISO 8601 duration string's small units into larger ones.
|
|
5
5
|
*
|
|
6
6
|
* - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
|
|
7
|
-
* -
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* becomes "PT2H30M". Pass an explicit largestUnit to promote further.
|
|
11
|
-
* - relativeTo is required whenever a calendar unit (year/month/week) is involved,
|
|
12
|
-
* either as the requested largestUnit or because the input duration already has a
|
|
13
|
-
* nonzero year/month/week component (this applies even under the "auto" default).
|
|
14
|
-
* Without relativeTo in either case, returns "".
|
|
15
|
-
* - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
|
|
16
|
-
* and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
|
|
17
|
-
* For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
|
|
18
|
-
* largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
|
|
19
|
-
* increment returns "".
|
|
7
|
+
* - With no options, units are promoted only up to a unit already present: "PT90M" stays
|
|
8
|
+
* "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
|
|
9
|
+
* largestUnit to promote further.
|
|
20
10
|
* - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
|
|
21
11
|
* "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
|
|
22
12
|
* one the later instant, and an offset that does not match the zone returns "". Pass an
|
|
@@ -38,7 +28,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
38
28
|
* invalid relativeTo.
|
|
39
29
|
*
|
|
40
30
|
* @param value ISO 8601 duration string
|
|
41
|
-
* @param options
|
|
31
|
+
* @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
|
|
42
32
|
* @returns rebalanced ISO 8601 duration string, or "" on invalid input
|
|
43
33
|
*
|
|
44
34
|
* @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
|
|
@@ -55,9 +45,44 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
55
45
|
* @example normalizeDuration("P45D", { largestUnit: "month", relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // "P1M15D" (a date-time without a zone reads as its date, as Temporal reads relativeTo)
|
|
56
46
|
*/
|
|
57
47
|
export declare function normalizeDuration(value: string, options?: {
|
|
48
|
+
/**
|
|
49
|
+
* The largest unit the result may carry; smaller units are rolled up into it. `"auto"` is
|
|
50
|
+
* the larger of `smallestUnit` and the duration's own largest nonzero unit, so nothing is
|
|
51
|
+
* promoted past a unit already present.
|
|
52
|
+
*
|
|
53
|
+
* @defaultValue `"auto"`
|
|
54
|
+
*/
|
|
58
55
|
largestUnit?: Temporal.LargestUnit<Temporal.DateTimeUnit>;
|
|
56
|
+
/**
|
|
57
|
+
* The smallest unit the result may carry; anything smaller is rounded into it.
|
|
58
|
+
*
|
|
59
|
+
* @defaultValue `"nanosecond"`, Temporal's default.
|
|
60
|
+
*/
|
|
59
61
|
smallestUnit?: Temporal.SmallestUnit<Temporal.DateTimeUnit>;
|
|
62
|
+
/**
|
|
63
|
+
* The step `smallestUnit` is rounded to. It must evenly divide, and be less than, 24 for
|
|
64
|
+
* hour, 60 for minute and second, and 1000 for the sub-second units. For year, month, week
|
|
65
|
+
* and day it has no maximum, but an increment above 1 is rejected unless `largestUnit` is
|
|
66
|
+
* that same unit; an invalid increment returns `""`.
|
|
67
|
+
*
|
|
68
|
+
* @defaultValue `1`, Temporal's default.
|
|
69
|
+
*/
|
|
60
70
|
roundingIncrement?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Which way a value between two steps goes when `smallestUnit` or `roundingIncrement` rounds
|
|
73
|
+
* the duration. `"halfExpand"` rounds to the nearest step, a half going away from zero, and
|
|
74
|
+
* `"trunc"` rounds toward zero.
|
|
75
|
+
*
|
|
76
|
+
* @defaultValue `"halfExpand"`, Temporal's default.
|
|
77
|
+
*/
|
|
61
78
|
roundingMode?: Temporal.RoundingMode;
|
|
79
|
+
/**
|
|
80
|
+
* The date or zoned date-time the duration is measured from. It is required whenever a year,
|
|
81
|
+
* month or week is involved, as `largestUnit` or `smallestUnit` or as a nonzero field of the
|
|
82
|
+
* duration, even under the `"auto"` default.
|
|
83
|
+
*
|
|
84
|
+
* @defaultValue None. Days are 24 hours, and a duration or unit that involves a year, month
|
|
85
|
+
* or week returns `""`.
|
|
86
|
+
*/
|
|
62
87
|
relativeTo?: DurationRelativeTo;
|
|
63
88
|
}): string;
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { durationRound, resolveDurationRelativeTo } from "../../internal/index.js";
|
|
3
3
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
4
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
4
5
|
/**
|
|
5
6
|
* Roll an ISO 8601 duration string's small units into larger ones.
|
|
6
7
|
*
|
|
7
8
|
* - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* becomes "PT2H30M". Pass an explicit largestUnit to promote further.
|
|
12
|
-
* - relativeTo is required whenever a calendar unit (year/month/week) is involved,
|
|
13
|
-
* either as the requested largestUnit or because the input duration already has a
|
|
14
|
-
* nonzero year/month/week component (this applies even under the "auto" default).
|
|
15
|
-
* Without relativeTo in either case, returns "".
|
|
16
|
-
* - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
|
|
17
|
-
* and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
|
|
18
|
-
* For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
|
|
19
|
-
* largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
|
|
20
|
-
* increment returns "".
|
|
9
|
+
* - With no options, units are promoted only up to a unit already present: "PT90M" stays
|
|
10
|
+
* "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
|
|
11
|
+
* largestUnit to promote further.
|
|
21
12
|
* - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
|
|
22
13
|
* "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
|
|
23
14
|
* one the later instant, and an offset that does not match the zone returns "". Pass an
|
|
@@ -39,7 +30,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
39
30
|
* invalid relativeTo.
|
|
40
31
|
*
|
|
41
32
|
* @param value ISO 8601 duration string
|
|
42
|
-
* @param options
|
|
33
|
+
* @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
|
|
43
34
|
* @returns rebalanced ISO 8601 duration string, or "" on invalid input
|
|
44
35
|
*
|
|
45
36
|
* @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
|
|
@@ -65,7 +56,7 @@ export function normalizeDuration(value, options) {
|
|
|
65
56
|
try {
|
|
66
57
|
const duration = Temporal.Duration.from(value);
|
|
67
58
|
return durationRound(duration, {
|
|
68
|
-
largestUnit: options?.largestUnit
|
|
59
|
+
largestUnit: optionOrDefault(options?.largestUnit, "auto"),
|
|
69
60
|
smallestUnit: options?.smallestUnit,
|
|
70
61
|
roundingIncrement: options?.roundingIncrement,
|
|
71
62
|
roundingMode: options?.roundingMode,
|
|
@@ -3,12 +3,10 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
3
3
|
* Parse and re-normalize an ISO 8601 duration string.
|
|
4
4
|
*
|
|
5
5
|
* - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
|
|
6
|
-
* - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
|
|
7
|
-
* of the re-emitted string, per Temporal's ToStringPrecisionOptions.
|
|
8
6
|
* - Returns "" for invalid input.
|
|
9
7
|
*
|
|
10
8
|
* @param value ISO 8601 duration string
|
|
11
|
-
* @param options
|
|
9
|
+
* @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
|
|
12
10
|
* @returns re-normalized ISO 8601 duration string, or "" on invalid input
|
|
13
11
|
*
|
|
14
12
|
* @example parseDuration("P1DT2H30M") // "P1DT2H30M"
|
|
@@ -18,7 +16,27 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
18
16
|
* @example parseDuration("invalid") // ""
|
|
19
17
|
*/
|
|
20
18
|
export declare function parseDuration(value: string, options?: {
|
|
19
|
+
/**
|
|
20
|
+
* The smallest unit written in the string: `"second"`, `"millisecond"`, `"microsecond"` or
|
|
21
|
+
* `"nanosecond"`. It sets how many fractional-second digits appear and takes precedence over
|
|
22
|
+
* `fractionalSecondDigits`. `"minute"` returns `""`, as `Temporal.Duration` refuses it.
|
|
23
|
+
*
|
|
24
|
+
* @defaultValue None. The precision comes from `fractionalSecondDigits`.
|
|
25
|
+
*/
|
|
21
26
|
smallestUnit?: Temporal.ToStringPrecisionOptions["smallestUnit"];
|
|
27
|
+
/**
|
|
28
|
+
* The number of fractional-second digits written: `0` to `9` writes exactly that many, and
|
|
29
|
+
* `"auto"` writes as many as the duration needs, with no trailing zeros. It has no effect when
|
|
30
|
+
* `smallestUnit` is given.
|
|
31
|
+
*
|
|
32
|
+
* @defaultValue `"auto"`, Temporal's default.
|
|
33
|
+
*/
|
|
22
34
|
fractionalSecondDigits?: Temporal.ToStringPrecisionOptions["fractionalSecondDigits"];
|
|
35
|
+
/**
|
|
36
|
+
* How the duration is rounded when the precision asked for drops digits. `"trunc"` cuts them
|
|
37
|
+
* off; `"halfExpand"` rounds to the nearest value, a half going away from zero.
|
|
38
|
+
*
|
|
39
|
+
* @defaultValue `"trunc"`, Temporal's default.
|
|
40
|
+
*/
|
|
23
41
|
roundingMode?: Temporal.ToStringPrecisionOptions["roundingMode"];
|
|
24
42
|
}): string;
|
|
@@ -4,12 +4,10 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
4
4
|
* Parse and re-normalize an ISO 8601 duration string.
|
|
5
5
|
*
|
|
6
6
|
* - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
|
|
7
|
-
* - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
|
|
8
|
-
* of the re-emitted string, per Temporal's ToStringPrecisionOptions.
|
|
9
7
|
* - Returns "" for invalid input.
|
|
10
8
|
*
|
|
11
9
|
* @param value ISO 8601 duration string
|
|
12
|
-
* @param options
|
|
10
|
+
* @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
|
|
13
11
|
* @returns re-normalized ISO 8601 duration string, or "" on invalid input
|
|
14
12
|
*
|
|
15
13
|
* @example parseDuration("P1DT2H30M") // "P1DT2H30M"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { DutyDay, Interval } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the operator-designated day an instant falls in: from the most recent `dayStartTime`
|
|
4
|
+
* in `timeZone` at or before the instant, up to (not including) the next one.
|
|
5
|
+
*
|
|
6
|
+
* The day an hours-of-work rule counts is the operator's, not the local midnight where the
|
|
7
|
+
* person happens to be, so the reference zone and the start time are both the caller's and
|
|
8
|
+
* neither has a default.
|
|
9
|
+
*
|
|
10
|
+
* - A `dayStartTime` that a clock change skips or repeats is resolved under `day.disambiguation`,
|
|
11
|
+
* the CORE-4 policy in `resolveLocal`. The default, `"compatible"`, reads a skipped time after
|
|
12
|
+
* the gap (02:30 on New York's spring-forward day is 03:30) and a repeated one at its first
|
|
13
|
+
* pass. The day that holds the change is then shorter or longer by the change: 23 or 25 hours
|
|
14
|
+
* across a one-hour change, 24.5 across Lord Howe's 30-minute fall-back, 21 across Casey's
|
|
15
|
+
* three-hour jump. `"reject"` returns `null` for
|
|
16
|
+
* a day that starts or ends at such a time.
|
|
17
|
+
* - The instant is read in `timeZone` whatever offset or zone it is written with, so a log whose
|
|
18
|
+
* entries cross zones still falls into the reference zone's days.
|
|
19
|
+
* - A date whose start resolves onto the next date's start opens no day: the date
|
|
20
|
+
* `Pacific/Apia` deleted in 2011 is part of no operator day.
|
|
21
|
+
* - Returns `null` when `instant` is not an ISO 8601 instant string, when `day` is not an object
|
|
22
|
+
* with a valid `timeZone` and a `dayStartTime` that `isValidTime` accepts, and when the day or
|
|
23
|
+
* the next one starts outside Temporal's instant range.
|
|
24
|
+
*
|
|
25
|
+
* @param instant ISO 8601 instant string to place
|
|
26
|
+
* @param day the reference zone and the local time each day starts at
|
|
27
|
+
* @returns `{ start, end }` of the day as UTC instants ending in "Z", or null on invalid input
|
|
28
|
+
*
|
|
29
|
+
* @example dutyDayFor("2024-01-01T08:59:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2023-12-31T09:00:00Z", end: "2024-01-01T09:00:00Z" } — 03:59 local is the previous day
|
|
30
|
+
* @example dutyDayFor("2024-01-01T09:00:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2024-01-01T09:00:00Z", end: "2024-01-02T09:00:00Z" }
|
|
31
|
+
* @example dutyDayFor("2024-03-10T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "02:30" }) // { start: "2024-03-10T07:30:00Z", end: "2024-03-11T06:30:00Z" } — 02:30 is skipped, read as 03:30; 23 hours
|
|
32
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30" }) // { start: "2024-11-03T05:30:00Z", end: "2024-11-04T06:30:00Z" } — 01:30 is repeated, the first pass starts it; 25 hours
|
|
33
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "later" }) // { start: "2024-11-03T06:30:00Z", end: "2024-11-04T06:30:00Z" } — the second pass; 24 hours
|
|
34
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "reject" }) // null — the day starts at a repeated time
|
|
35
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "UTC" }) // null — no dayStartTime
|
|
36
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "Invalid/Zone", dayStartTime: "04:00" }) // null
|
|
37
|
+
*/
|
|
38
|
+
export declare function dutyDayFor(instant: string, day: DutyDay): Interval | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
+
import { isObject, parseInstantNanoseconds, zoneFrame } from "../../internal/index.js";
|
|
3
|
+
import { operatorDayScale, parseDayStartTime, } from "../../internal/dutyPeriods.js";
|
|
4
|
+
import { parseScheduleDisambiguation } from "../../internal/operatingSchedule.js";
|
|
5
|
+
/**
|
|
6
|
+
* Return the operator-designated day an instant falls in: from the most recent `dayStartTime`
|
|
7
|
+
* in `timeZone` at or before the instant, up to (not including) the next one.
|
|
8
|
+
*
|
|
9
|
+
* The day an hours-of-work rule counts is the operator's, not the local midnight where the
|
|
10
|
+
* person happens to be, so the reference zone and the start time are both the caller's and
|
|
11
|
+
* neither has a default.
|
|
12
|
+
*
|
|
13
|
+
* - A `dayStartTime` that a clock change skips or repeats is resolved under `day.disambiguation`,
|
|
14
|
+
* the CORE-4 policy in `resolveLocal`. The default, `"compatible"`, reads a skipped time after
|
|
15
|
+
* the gap (02:30 on New York's spring-forward day is 03:30) and a repeated one at its first
|
|
16
|
+
* pass. The day that holds the change is then shorter or longer by the change: 23 or 25 hours
|
|
17
|
+
* across a one-hour change, 24.5 across Lord Howe's 30-minute fall-back, 21 across Casey's
|
|
18
|
+
* three-hour jump. `"reject"` returns `null` for
|
|
19
|
+
* a day that starts or ends at such a time.
|
|
20
|
+
* - The instant is read in `timeZone` whatever offset or zone it is written with, so a log whose
|
|
21
|
+
* entries cross zones still falls into the reference zone's days.
|
|
22
|
+
* - A date whose start resolves onto the next date's start opens no day: the date
|
|
23
|
+
* `Pacific/Apia` deleted in 2011 is part of no operator day.
|
|
24
|
+
* - Returns `null` when `instant` is not an ISO 8601 instant string, when `day` is not an object
|
|
25
|
+
* with a valid `timeZone` and a `dayStartTime` that `isValidTime` accepts, and when the day or
|
|
26
|
+
* the next one starts outside Temporal's instant range.
|
|
27
|
+
*
|
|
28
|
+
* @param instant ISO 8601 instant string to place
|
|
29
|
+
* @param day the reference zone and the local time each day starts at
|
|
30
|
+
* @returns `{ start, end }` of the day as UTC instants ending in "Z", or null on invalid input
|
|
31
|
+
*
|
|
32
|
+
* @example dutyDayFor("2024-01-01T08:59:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2023-12-31T09:00:00Z", end: "2024-01-01T09:00:00Z" } — 03:59 local is the previous day
|
|
33
|
+
* @example dutyDayFor("2024-01-01T09:00:00Z", { timeZone: "America/New_York", dayStartTime: "04:00" }) // { start: "2024-01-01T09:00:00Z", end: "2024-01-02T09:00:00Z" }
|
|
34
|
+
* @example dutyDayFor("2024-03-10T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "02:30" }) // { start: "2024-03-10T07:30:00Z", end: "2024-03-11T06:30:00Z" } — 02:30 is skipped, read as 03:30; 23 hours
|
|
35
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30" }) // { start: "2024-11-03T05:30:00Z", end: "2024-11-04T06:30:00Z" } — 01:30 is repeated, the first pass starts it; 25 hours
|
|
36
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "later" }) // { start: "2024-11-03T06:30:00Z", end: "2024-11-04T06:30:00Z" } — the second pass; 24 hours
|
|
37
|
+
* @example dutyDayFor("2024-11-03T12:00:00Z", { timeZone: "America/New_York", dayStartTime: "01:30", disambiguation: "reject" }) // null — the day starts at a repeated time
|
|
38
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "UTC" }) // null — no dayStartTime
|
|
39
|
+
* @example dutyDayFor("2024-01-01T12:00:00Z", { timeZone: "Invalid/Zone", dayStartTime: "04:00" }) // null
|
|
40
|
+
*/
|
|
41
|
+
export function dutyDayFor(instant, day) {
|
|
42
|
+
try {
|
|
43
|
+
if (typeof instant !== "string" || !isObject(day)) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const { timeZone, dayStartTime } = day;
|
|
47
|
+
const disambiguation = parseScheduleDisambiguation(day);
|
|
48
|
+
const at = parseInstantNanoseconds(instant);
|
|
49
|
+
const frame = zoneFrame(timeZone);
|
|
50
|
+
const time = parseDayStartTime(dayStartTime);
|
|
51
|
+
if (at === null ||
|
|
52
|
+
frame === null ||
|
|
53
|
+
time === null ||
|
|
54
|
+
disambiguation === null) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const span = operatorDayScale(frame, time, disambiguation).containing(at);
|
|
58
|
+
if (span === null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
start: Temporal.Instant.fromEpochNanoseconds(span.start).toString(),
|
|
63
|
+
end: Temporal.Instant.fromEpochNanoseconds(span.end).toString(),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Never throws (Core Rule 3): a hostile
|
|
68
|
+
// argument is invalid input, not an exception.
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DutyEntry, Interval } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the time a duty log spends in any of `statuses` inside a window, as an exact ISO 8601
|
|
4
|
+
* duration.
|
|
5
|
+
*
|
|
6
|
+
* - The interval algebra of CORE-6: the entries in `statuses` are merged, each run is cut to
|
|
7
|
+
* `window` (half-open), and what is left is summed. An entry that crosses the window's edge
|
|
8
|
+
* counts only its part inside.
|
|
9
|
+
* - Hours are the largest unit, as `sumIntervals` writes it: `"PT49H30M"`, never days.
|
|
10
|
+
* - `[]` as `statuses`, an empty log or an empty window gives `"PT0S"`.
|
|
11
|
+
* - Returns `""` when the log fails `isValidDutyLog`, when `window` is not a valid `Interval`, and
|
|
12
|
+
* when `statuses` is not an array of strings.
|
|
13
|
+
*
|
|
14
|
+
* @param log the duty log, ordered and non-overlapping
|
|
15
|
+
* @param window `{ start, end }` record of ISO 8601 instant strings to total inside
|
|
16
|
+
* @param statuses the statuses whose time is totalled
|
|
17
|
+
* @returns ISO 8601 duration string, or "" on invalid input
|
|
18
|
+
*
|
|
19
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }, { status: "onDuty", start: "2024-01-01T15:00:00Z", end: "2024-01-01T17:00:00Z" }, { status: "driving", start: "2024-01-01T17:00:00Z", end: "2024-01-01T20:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT8H"
|
|
20
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }], { start: "2024-01-01T12:00:00Z", end: "2024-01-01T18:00:00Z" }, ["driving"]) // "PT3H" — cut at the window
|
|
21
|
+
* @example dutyTotals([], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT0S"
|
|
22
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T15:00:00Z", end: "2024-01-01T10:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "" — inverted entry
|
|
23
|
+
*/
|
|
24
|
+
export declare function dutyTotals(log: DutyEntry[], window: Interval, statuses: string[]): string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { formatHourDuration, parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { parseDutyLog } from "../../internal/dutyLog.js";
|
|
3
|
+
import { readStatusList, timeIn } from "../../internal/dutyEngine.js";
|
|
4
|
+
/**
|
|
5
|
+
* Return the time a duty log spends in any of `statuses` inside a window, as an exact ISO 8601
|
|
6
|
+
* duration.
|
|
7
|
+
*
|
|
8
|
+
* - The interval algebra of CORE-6: the entries in `statuses` are merged, each run is cut to
|
|
9
|
+
* `window` (half-open), and what is left is summed. An entry that crosses the window's edge
|
|
10
|
+
* counts only its part inside.
|
|
11
|
+
* - Hours are the largest unit, as `sumIntervals` writes it: `"PT49H30M"`, never days.
|
|
12
|
+
* - `[]` as `statuses`, an empty log or an empty window gives `"PT0S"`.
|
|
13
|
+
* - Returns `""` when the log fails `isValidDutyLog`, when `window` is not a valid `Interval`, and
|
|
14
|
+
* when `statuses` is not an array of strings.
|
|
15
|
+
*
|
|
16
|
+
* @param log the duty log, ordered and non-overlapping
|
|
17
|
+
* @param window `{ start, end }` record of ISO 8601 instant strings to total inside
|
|
18
|
+
* @param statuses the statuses whose time is totalled
|
|
19
|
+
* @returns ISO 8601 duration string, or "" on invalid input
|
|
20
|
+
*
|
|
21
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }, { status: "onDuty", start: "2024-01-01T15:00:00Z", end: "2024-01-01T17:00:00Z" }, { status: "driving", start: "2024-01-01T17:00:00Z", end: "2024-01-01T20:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT8H"
|
|
22
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T10:00:00Z", end: "2024-01-01T15:00:00Z" }], { start: "2024-01-01T12:00:00Z", end: "2024-01-01T18:00:00Z" }, ["driving"]) // "PT3H" — cut at the window
|
|
23
|
+
* @example dutyTotals([], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "PT0S"
|
|
24
|
+
* @example dutyTotals([{ status: "driving", start: "2024-01-01T15:00:00Z", end: "2024-01-01T10:00:00Z" }], { start: "2024-01-01T00:00:00Z", end: "2024-01-02T00:00:00Z" }, ["driving"]) // "" — inverted entry
|
|
25
|
+
*/
|
|
26
|
+
export function dutyTotals(log, window, statuses) {
|
|
27
|
+
try {
|
|
28
|
+
const entries = parseDutyLog(log);
|
|
29
|
+
const bounds = parseIntervalNanoseconds(window);
|
|
30
|
+
const counted = readStatusList(statuses);
|
|
31
|
+
if (entries === null || bounds === null || counted === null) {
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
return formatHourDuration(timeIn(entries, counted, bounds.start, bounds.end));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Never throws (Core Rule 3): a hostile
|
|
38
|
+
// argument is invalid input, not an exception.
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
}
|