@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,65 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { instantAfterOpenTime, instantText, parseOpenTimeAmount, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the instant at which `duration` of open time has elapsed since `start`: the deadline
|
|
5
|
+
* of a service level measured in working hours.
|
|
6
|
+
*
|
|
7
|
+
* - The earliest instant `X` such that `operatingTimeBetween(start, X, schedule)` equals
|
|
8
|
+
* `duration`. The clock stops while the schedule is closed and resumes when it reopens, so an
|
|
9
|
+
* eight-hour SLA raised at Friday 16:00 on a 09:00–17:00 weekday desk falls due on Monday at
|
|
10
|
+
* 16:00. A deadline that lands exactly on a closing time is that closing instant, not the next
|
|
11
|
+
* opening.
|
|
12
|
+
* - `duration` is hours and smaller units (`"PT8H"`, `"PT90M"`). A duration with days, weeks,
|
|
13
|
+
* months or years returns `""`: `P1D` of open time could mean 24 open hours or one working
|
|
14
|
+
* day, and GMT does not guess. `"PT0S"` returns `start` itself, in UTC.
|
|
15
|
+
* - Returns `""` when the deadline would fall past the search horizon, rather than searching
|
|
16
|
+
* forever.
|
|
17
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
18
|
+
* - Returns `""` on invalid input: an invalid instant, duration or `OperatingSchedule`, a
|
|
19
|
+
* negative `duration`, a `within` that is not a non-negative ISO duration, a `disambiguation`
|
|
20
|
+
* that is not one of the four values, and a search that would go more than 10,000 local dates past the input's date.
|
|
21
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
22
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
23
|
+
* offset's seconds (under a minute) of the last instant Temporal supports
|
|
24
|
+
* (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
|
|
25
|
+
* (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
|
|
26
|
+
* such limit.
|
|
27
|
+
*
|
|
28
|
+
* @param start ISO 8601 instant string where the clock starts
|
|
29
|
+
* @param duration ISO 8601 duration of open time, hours and smaller units (e.g. "PT8H")
|
|
30
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
31
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
32
|
+
* @returns UTC instant string ending in "Z", or "" when past the horizon or on invalid input
|
|
33
|
+
*
|
|
34
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — Friday 16:00 to Monday 10:00 local
|
|
35
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT1H", { timeZone: "America/New_York", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-14T21:00:00Z" — due at closing, not at the next opening
|
|
36
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — past the horizon
|
|
37
|
+
* @example addOperatingTime("2024-06-15T12:00:00Z", "PT0S", { timeZone: "UTC", weekly: {} }) // "2024-06-15T12:00:00Z"
|
|
38
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "P1D", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "" — days are not open time
|
|
39
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "-PT1H", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // ""
|
|
40
|
+
*/
|
|
41
|
+
export function addOperatingTime(start, duration, schedule, optionsArg) {
|
|
42
|
+
try {
|
|
43
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
44
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
45
|
+
const from = parseInstantNanoseconds(start);
|
|
46
|
+
const amount = parseOpenTimeAmount(duration);
|
|
47
|
+
if (disambiguation === null ||
|
|
48
|
+
resolved === null ||
|
|
49
|
+
from === null ||
|
|
50
|
+
amount === null) {
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.frame);
|
|
54
|
+
if (horizon === null) {
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
const answer = instantAfterOpenTime(resolved, from, amount, horizon, disambiguation);
|
|
58
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Never throws (Core Rule 3): a hostile
|
|
62
|
+
// argument is invalid input, not an exception.
|
|
63
|
+
return "";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./addOperatingTime.js";
|
|
2
|
+
export * from "./isOpenAt.js";
|
|
3
|
+
export * from "./nextCloseAt.js";
|
|
4
|
+
export * from "./nextOpenAt.js";
|
|
5
|
+
export * from "./operatingIntervals.js";
|
|
6
|
+
export * from "./operatingTimeBetween.js";
|
|
7
|
+
export * from "./recurringWindows.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./addOperatingTime.js";
|
|
2
|
+
export * from "./isOpenAt.js";
|
|
3
|
+
export * from "./nextCloseAt.js";
|
|
4
|
+
export * from "./nextOpenAt.js";
|
|
5
|
+
export * from "./operatingIntervals.js";
|
|
6
|
+
export * from "./operatingTimeBetween.js";
|
|
7
|
+
export * from "./recurringWindows.js";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `schedule` is open at the instant `isoString`.
|
|
4
|
+
*
|
|
5
|
+
* - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
|
|
6
|
+
* instant is open, a closing instant is closed. Where one window ends as the next begins, the
|
|
7
|
+
* schedule stays open.
|
|
8
|
+
* - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
|
|
9
|
+
* on Saturday even when Saturday is a holiday.
|
|
10
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
|
|
11
|
+
* never supplies the zone — the schedule's own zone reads the windows. Only its instant is
|
|
12
|
+
* read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
|
|
13
|
+
* - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
|
|
14
|
+
* `disambiguation` that is not one of the four values. Check the schedule with
|
|
15
|
+
* `operatingIntervals` when "closed" and "invalid" must be told apart.
|
|
16
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
17
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
18
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
19
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `false`. There `false` is
|
|
20
|
+
* the sentinel, not a reading of the schedule. An offset to the minute has no such limit.
|
|
21
|
+
*
|
|
22
|
+
* @param isoString ISO 8601 instant string to test
|
|
23
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
24
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
25
|
+
* @returns true when open at that instant, or false when closed or on invalid input
|
|
26
|
+
*
|
|
27
|
+
* @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
|
|
28
|
+
* @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
|
|
29
|
+
* @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
|
|
30
|
+
* @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
|
|
31
|
+
* @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
|
|
32
|
+
* @example isOpenAt("1970-01-01T08:44:30Z", { timeZone: "-00:44:30", weekly: { 4: [{ from: "08:00", to: "17:00" }] } }) // true (08:00 at a stored offset with seconds)
|
|
33
|
+
*/
|
|
34
|
+
export declare function isOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
35
|
+
/**
|
|
36
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
37
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
38
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
39
|
+
* both cases. `"reject"` returns `false` when a window with such an edge is the only one that
|
|
40
|
+
* could be open at `isoString`.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
43
|
+
*/
|
|
44
|
+
disambiguation?: Disambiguation;
|
|
45
|
+
}): boolean;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { firstOpenInstant, parseOperatingSchedule, parseScheduleDisambiguation, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return true when `schedule` is open at the instant `isoString`.
|
|
5
|
+
*
|
|
6
|
+
* - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
|
|
7
|
+
* instant is open, a closing instant is closed. Where one window ends as the next begins, the
|
|
8
|
+
* schedule stays open.
|
|
9
|
+
* - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
|
|
10
|
+
* on Saturday even when Saturday is a holiday.
|
|
11
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
|
|
12
|
+
* never supplies the zone — the schedule's own zone reads the windows. Only its instant is
|
|
13
|
+
* read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
|
|
14
|
+
* - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
|
|
15
|
+
* `disambiguation` that is not one of the four values. Check the schedule with
|
|
16
|
+
* `operatingIntervals` when "closed" and "invalid" must be told apart.
|
|
17
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
18
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
19
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
20
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `false`. There `false` is
|
|
21
|
+
* the sentinel, not a reading of the schedule. An offset to the minute has no such limit.
|
|
22
|
+
*
|
|
23
|
+
* @param isoString ISO 8601 instant string to test
|
|
24
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
25
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
26
|
+
* @returns true when open at that instant, or false when closed or on invalid input
|
|
27
|
+
*
|
|
28
|
+
* @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
|
|
29
|
+
* @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
|
|
30
|
+
* @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
|
|
31
|
+
* @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
|
|
32
|
+
* @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
|
|
33
|
+
* @example isOpenAt("1970-01-01T08:44:30Z", { timeZone: "-00:44:30", weekly: { 4: [{ from: "08:00", to: "17:00" }] } }) // true (08:00 at a stored offset with seconds)
|
|
34
|
+
*/
|
|
35
|
+
export function isOpenAt(isoString, schedule, optionsArg) {
|
|
36
|
+
try {
|
|
37
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
38
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
39
|
+
const at = parseInstantNanoseconds(isoString);
|
|
40
|
+
if (disambiguation === null || resolved === null || at === null) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return firstOpenInstant(resolved, at, at, disambiguation) === at;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Never throws (Core Rule 3): a hostile
|
|
47
|
+
// argument is invalid input, not an exception.
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the first instant at or after `isoString` that `schedule` is closed, as a UTC instant.
|
|
4
|
+
*
|
|
5
|
+
* - Open at `isoString`: returns the end of the open interval holding it — when the gate
|
|
6
|
+
* closes. Windows that touch are one interval, so a schedule open 00:00–00:00 every day
|
|
7
|
+
* closes only where a day has no window.
|
|
8
|
+
* - Already closed at `isoString`: returns `isoString` itself, in UTC. Pair it with
|
|
9
|
+
* `nextOpenAt` to find the next open interval: `nextCloseAt(nextOpenAt(t, s), s)`.
|
|
10
|
+
* - Returns `""` when the schedule stays open past the search horizon — a schedule open around
|
|
11
|
+
* the clock never closes.
|
|
12
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
13
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
|
|
14
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
|
|
15
|
+
* not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
|
|
16
|
+
* a search that would go more than 10,000 local dates past the input's date.
|
|
17
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
18
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
19
|
+
* offset's seconds (under a minute) of the last instant Temporal supports
|
|
20
|
+
* (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
|
|
21
|
+
* (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
|
|
22
|
+
* such limit.
|
|
23
|
+
*
|
|
24
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
25
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
26
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
27
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
28
|
+
*
|
|
29
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T21:00:00Z" — Monday 10:00 to 17:00 local
|
|
30
|
+
* @example nextCloseAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-15T16:00:00Z" — already closed
|
|
31
|
+
* @example nextCloseAt("2024-06-14T23:30:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // "2024-06-15T06:00:00Z" — Friday's night window
|
|
32
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] } }) // "2024-06-19T00:00:00Z" — two touching days are one interval
|
|
33
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
|
|
34
|
+
* @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
|
|
35
|
+
*/
|
|
36
|
+
export declare function nextCloseAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
37
|
+
/**
|
|
38
|
+
* How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
|
|
39
|
+
* schedule's zone, so `"P1D"` is one local day. A closing exactly at that horizon counts, and a
|
|
40
|
+
* horizon past Temporal's last instant stops there.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue `"P1Y"`
|
|
43
|
+
*/
|
|
44
|
+
within?: string;
|
|
45
|
+
/**
|
|
46
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
47
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
48
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
49
|
+
* both cases. `"reject"` returns `""` when a window with such an edge could keep the schedule
|
|
50
|
+
* open past the answer.
|
|
51
|
+
*
|
|
52
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
53
|
+
*/
|
|
54
|
+
disambiguation?: Disambiguation;
|
|
55
|
+
}): string;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { firstClosedInstant, instantText, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the first instant at or after `isoString` that `schedule` is closed, as a UTC instant.
|
|
5
|
+
*
|
|
6
|
+
* - Open at `isoString`: returns the end of the open interval holding it — when the gate
|
|
7
|
+
* closes. Windows that touch are one interval, so a schedule open 00:00–00:00 every day
|
|
8
|
+
* closes only where a day has no window.
|
|
9
|
+
* - Already closed at `isoString`: returns `isoString` itself, in UTC. Pair it with
|
|
10
|
+
* `nextOpenAt` to find the next open interval: `nextCloseAt(nextOpenAt(t, s), s)`.
|
|
11
|
+
* - Returns `""` when the schedule stays open past the search horizon — a schedule open around
|
|
12
|
+
* the clock never closes.
|
|
13
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
14
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
|
|
15
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
|
|
16
|
+
* not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
|
|
17
|
+
* a search that would go more than 10,000 local dates past the input's date.
|
|
18
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
19
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
20
|
+
* offset's seconds (under a minute) of the last instant Temporal supports
|
|
21
|
+
* (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
|
|
22
|
+
* (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
|
|
23
|
+
* such limit.
|
|
24
|
+
*
|
|
25
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
26
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
27
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
28
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
29
|
+
*
|
|
30
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T21:00:00Z" — Monday 10:00 to 17:00 local
|
|
31
|
+
* @example nextCloseAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-15T16:00:00Z" — already closed
|
|
32
|
+
* @example nextCloseAt("2024-06-14T23:30:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // "2024-06-15T06:00:00Z" — Friday's night window
|
|
33
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] } }) // "2024-06-19T00:00:00Z" — two touching days are one interval
|
|
34
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
|
|
35
|
+
* @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
|
|
36
|
+
*/
|
|
37
|
+
export function nextCloseAt(isoString, schedule, optionsArg) {
|
|
38
|
+
try {
|
|
39
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
40
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
41
|
+
const from = parseInstantNanoseconds(isoString);
|
|
42
|
+
if (disambiguation === null || resolved === null || from === null) {
|
|
43
|
+
return "";
|
|
44
|
+
}
|
|
45
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.frame);
|
|
46
|
+
if (horizon === null) {
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
const answer = firstClosedInstant(resolved, from, horizon, disambiguation);
|
|
50
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Never throws (Core Rule 3): a hostile
|
|
54
|
+
// argument is invalid input, not an exception.
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the first instant at or after `isoString` that `schedule` is open, as a UTC instant.
|
|
4
|
+
*
|
|
5
|
+
* - Already open at `isoString`: returns `isoString` itself, in UTC. Otherwise returns the start
|
|
6
|
+
* of the next open interval — the moment a gate opens, or a notice can be tendered.
|
|
7
|
+
* - Returns `""` when the schedule does not open within the search horizon, rather than
|
|
8
|
+
* searching forever.
|
|
9
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
10
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
|
|
11
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
|
|
12
|
+
* not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
|
|
13
|
+
* a search that would go more than 10,000 local dates past the input's date.
|
|
14
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
15
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
16
|
+
* offset's seconds (under a minute) of the last instant Temporal supports
|
|
17
|
+
* (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
|
|
18
|
+
* (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
|
|
19
|
+
* such limit.
|
|
20
|
+
*
|
|
21
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
22
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
23
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
24
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
25
|
+
*
|
|
26
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T13:00:00Z" — Saturday noon to Monday 09:00 local
|
|
27
|
+
* @example nextOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — already open
|
|
28
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — Monday is past the horizon
|
|
29
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
|
|
30
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
|
|
31
|
+
*/
|
|
32
|
+
export declare function nextOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
33
|
+
/**
|
|
34
|
+
* How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
|
|
35
|
+
* schedule's zone, so `"P1D"` is one local day. An opening exactly at that horizon counts, and a
|
|
36
|
+
* horizon past Temporal's last instant stops there.
|
|
37
|
+
*
|
|
38
|
+
* @defaultValue `"P1Y"`
|
|
39
|
+
*/
|
|
40
|
+
within?: string;
|
|
41
|
+
/**
|
|
42
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
43
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
44
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
45
|
+
* both cases. `"reject"` returns `""` when a window with such an edge could open before the
|
|
46
|
+
* answer.
|
|
47
|
+
*
|
|
48
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
49
|
+
*/
|
|
50
|
+
disambiguation?: Disambiguation;
|
|
51
|
+
}): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { firstOpenInstant, instantText, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the first instant at or after `isoString` that `schedule` is open, as a UTC instant.
|
|
5
|
+
*
|
|
6
|
+
* - Already open at `isoString`: returns `isoString` itself, in UTC. Otherwise returns the start
|
|
7
|
+
* of the next open interval — the moment a gate opens, or a notice can be tendered.
|
|
8
|
+
* - Returns `""` when the schedule does not open within the search horizon, rather than
|
|
9
|
+
* searching forever.
|
|
10
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
11
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
|
|
12
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
|
|
13
|
+
* not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
|
|
14
|
+
* a search that would go more than 10,000 local dates past the input's date.
|
|
15
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
16
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
17
|
+
* offset's seconds (under a minute) of the last instant Temporal supports
|
|
18
|
+
* (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
|
|
19
|
+
* (`-271821-04-20T00:00:00Z`) for one west, this returns `""`. An offset to the minute has no
|
|
20
|
+
* such limit.
|
|
21
|
+
*
|
|
22
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
23
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
24
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
25
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
26
|
+
*
|
|
27
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T13:00:00Z" — Saturday noon to Monday 09:00 local
|
|
28
|
+
* @example nextOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — already open
|
|
29
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — Monday is past the horizon
|
|
30
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
|
|
31
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
|
|
32
|
+
*/
|
|
33
|
+
export function nextOpenAt(isoString, schedule, optionsArg) {
|
|
34
|
+
try {
|
|
35
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
36
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
37
|
+
const from = parseInstantNanoseconds(isoString);
|
|
38
|
+
if (disambiguation === null || resolved === null || from === null) {
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.frame);
|
|
42
|
+
if (horizon === null) {
|
|
43
|
+
return "";
|
|
44
|
+
}
|
|
45
|
+
const answer = firstOpenInstant(resolved, from, horizon, disambiguation);
|
|
46
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Never throws (Core Rule 3): a hostile
|
|
50
|
+
// argument is invalid input, not an exception.
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Disambiguation, Interval, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the instants an `OperatingSchedule` is open inside `range`: its weekly windows with
|
|
4
|
+
* holidays closed and overrides applied, resolved in the schedule's zone.
|
|
5
|
+
*
|
|
6
|
+
* - Works date by date in `schedule.timeZone`. A date listed in `holidays` has no windows; a
|
|
7
|
+
* date with an override has exactly the override's windows, holiday or not. `holidays` may be
|
|
8
|
+
* a `BusinessCalendar`, whose `holidays` are read.
|
|
9
|
+
* - A window belongs to the date it starts on, so a holiday or override on Friday removes or
|
|
10
|
+
* replaces a Friday 23:00–06:00 window, and one on Saturday leaves it alone.
|
|
11
|
+
* - Window edges are local wall times; `recurringWindows` states the window rules in full.
|
|
12
|
+
* - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
|
|
13
|
+
* touch. Endpoints are UTC instants ending in `Z`, except a clipped edge, which is `range`'s
|
|
14
|
+
* own string.
|
|
15
|
+
* - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
|
|
16
|
+
* - Returns `[]` when `schedule` is not a valid `OperatingSchedule` (a weekday key other than
|
|
17
|
+
* `"1"`–`"7"`, a malformed window, an invalid zone, holiday or override date, or two overrides
|
|
18
|
+
* for one date), when `range` is not a valid `Interval`, when `disambiguation` is not one of
|
|
19
|
+
* the four values, and when the range spans more than 10,000 local dates (about 27 years)
|
|
20
|
+
* counted from the date `range.start` falls on.
|
|
21
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
22
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
23
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
24
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `[]`. An offset to the
|
|
25
|
+
* minute has no such limit.
|
|
26
|
+
*
|
|
27
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
28
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
|
|
29
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
30
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
31
|
+
*
|
|
32
|
+
* @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-06T00:00:00Z" }) // [{ start: "2024-07-05T13:00:00Z", end: "2024-07-05T21:00:00Z" }] — the holiday is closed
|
|
33
|
+
* @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"], overrides: [{ date: "2024-07-04", windows: [{ from: "10:00", to: "12:00" }] }] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-05T00:00:00Z" }) // [{ start: "2024-07-04T14:00:00Z", end: "2024-07-04T16:00:00Z" }] — the override wins
|
|
34
|
+
* @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }) // [{ start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }] — clipped to the range
|
|
35
|
+
* @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] }, overrides: [{ date: "2024-06-10", windows: [] }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // [] — closed by override
|
|
36
|
+
* @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
|
|
37
|
+
*/
|
|
38
|
+
export declare function operatingIntervals(schedule: OperatingSchedule, range: Interval, optionsArg?: {
|
|
39
|
+
/**
|
|
40
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
41
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
42
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
43
|
+
* both cases. `"reject"` returns `[]` when a window with such an edge reaches the range.
|
|
44
|
+
*
|
|
45
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
46
|
+
*/
|
|
47
|
+
disambiguation?: Disambiguation;
|
|
48
|
+
}): Interval[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { parseOperatingSchedule, parseScheduleDisambiguation, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the instants an `OperatingSchedule` is open inside `range`: its weekly windows with
|
|
5
|
+
* holidays closed and overrides applied, resolved in the schedule's zone.
|
|
6
|
+
*
|
|
7
|
+
* - Works date by date in `schedule.timeZone`. A date listed in `holidays` has no windows; a
|
|
8
|
+
* date with an override has exactly the override's windows, holiday or not. `holidays` may be
|
|
9
|
+
* a `BusinessCalendar`, whose `holidays` are read.
|
|
10
|
+
* - A window belongs to the date it starts on, so a holiday or override on Friday removes or
|
|
11
|
+
* replaces a Friday 23:00–06:00 window, and one on Saturday leaves it alone.
|
|
12
|
+
* - Window edges are local wall times; `recurringWindows` states the window rules in full.
|
|
13
|
+
* - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
|
|
14
|
+
* touch. Endpoints are UTC instants ending in `Z`, except a clipped edge, which is `range`'s
|
|
15
|
+
* own string.
|
|
16
|
+
* - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
|
|
17
|
+
* - Returns `[]` when `schedule` is not a valid `OperatingSchedule` (a weekday key other than
|
|
18
|
+
* `"1"`–`"7"`, a malformed window, an invalid zone, holiday or override date, or two overrides
|
|
19
|
+
* for one date), when `range` is not a valid `Interval`, when `disambiguation` is not one of
|
|
20
|
+
* the four values, and when the range spans more than 10,000 local dates (about 27 years)
|
|
21
|
+
* counted from the date `range.start` falls on.
|
|
22
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
23
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
24
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
25
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `[]`. An offset to the
|
|
26
|
+
* minute has no such limit.
|
|
27
|
+
*
|
|
28
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
29
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
|
|
30
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
31
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
32
|
+
*
|
|
33
|
+
* @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-06T00:00:00Z" }) // [{ start: "2024-07-05T13:00:00Z", end: "2024-07-05T21:00:00Z" }] — the holiday is closed
|
|
34
|
+
* @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"], overrides: [{ date: "2024-07-04", windows: [{ from: "10:00", to: "12:00" }] }] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-05T00:00:00Z" }) // [{ start: "2024-07-04T14:00:00Z", end: "2024-07-04T16:00:00Z" }] — the override wins
|
|
35
|
+
* @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }) // [{ start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }] — clipped to the range
|
|
36
|
+
* @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] }, overrides: [{ date: "2024-06-10", windows: [] }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // [] — closed by override
|
|
37
|
+
* @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
|
|
38
|
+
*/
|
|
39
|
+
export function operatingIntervals(schedule, range, optionsArg) {
|
|
40
|
+
try {
|
|
41
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
42
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
43
|
+
const bounds = parseIntervalNanoseconds(range);
|
|
44
|
+
if (disambiguation === null || resolved === null || bounds === null) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const runs = scheduleRunsWithin(resolved, bounds, disambiguation);
|
|
48
|
+
return runs === null
|
|
49
|
+
? []
|
|
50
|
+
: runs.map((run) => ({ start: run.startText, end: run.endText }));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Never throws (Core Rule 3): a hostile
|
|
54
|
+
// argument is invalid input, not an exception.
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return how much open time `schedule` has between two instants, as an exact ISO duration.
|
|
4
|
+
*
|
|
5
|
+
* - The open time in the half-open range `[start, end)`: the length of its intersection with
|
|
6
|
+
* `operatingIntervals(schedule, { start, end })`, summed as `sumIntervals` sums. A support
|
|
7
|
+
* ticket raised Friday 16:00 and answered Monday 10:00 on a 09:00–17:00 weekday desk has
|
|
8
|
+
* waited `PT2H` of open time.
|
|
9
|
+
* - Hours are the largest unit (`PT40H`, not `P1DT16H`): an open-time total has no calendar.
|
|
10
|
+
* Exact to the nanosecond, and elapsed time, not wall-clock distance, so a 00:00–00:00 window
|
|
11
|
+
* on a New York fall-back date adds 25 hours.
|
|
12
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
13
|
+
* - `start === end` returns `"PT0S"`.
|
|
14
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, `start` after
|
|
15
|
+
* `end`, a `disambiguation` that is not one of the four values, and a range spanning more than
|
|
16
|
+
* 10,000 local dates (about 27 years) counted from the date `start` falls on.
|
|
17
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
18
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
19
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
20
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `""`. An offset to the
|
|
21
|
+
* minute has no such limit.
|
|
22
|
+
*
|
|
23
|
+
* @param start ISO 8601 instant string where the clock starts (inclusive)
|
|
24
|
+
* @param end ISO 8601 instant string where the clock stops (exclusive)
|
|
25
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
26
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
27
|
+
* @returns ISO 8601 duration string of the open time, or "" on invalid input
|
|
28
|
+
*
|
|
29
|
+
* @example operatingTimeBetween("2024-06-14T20:00:00Z", "2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "PT2H" — Friday 16:00 to Monday 10:00 local
|
|
30
|
+
* @example operatingTimeBetween("2024-06-15T00:00:00Z", "2024-06-16T00:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT0S" — a closed Saturday
|
|
31
|
+
* @example operatingTimeBetween("2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z", { timeZone: "America/New_York", weekly: { 7: [{ from: "00:00", to: "00:00" }] } }) // "PT25H" — the fall-back day
|
|
32
|
+
* @example operatingTimeBetween("2024-06-10T09:00:00Z", "2024-06-10T09:30:00.5Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT30M0.5S"
|
|
33
|
+
* @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
|
|
34
|
+
*/
|
|
35
|
+
export declare function operatingTimeBetween(start: string, end: string, schedule: OperatingSchedule, optionsArg?: {
|
|
36
|
+
/**
|
|
37
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
38
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
39
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
40
|
+
* both cases. `"reject"` returns `""` when a window with such an edge reaches the range.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
43
|
+
*/
|
|
44
|
+
disambiguation?: Disambiguation;
|
|
45
|
+
}): string;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { formatHourDuration, parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { parseOperatingSchedule, parseScheduleDisambiguation, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return how much open time `schedule` has between two instants, as an exact ISO duration.
|
|
5
|
+
*
|
|
6
|
+
* - The open time in the half-open range `[start, end)`: the length of its intersection with
|
|
7
|
+
* `operatingIntervals(schedule, { start, end })`, summed as `sumIntervals` sums. A support
|
|
8
|
+
* ticket raised Friday 16:00 and answered Monday 10:00 on a 09:00–17:00 weekday desk has
|
|
9
|
+
* waited `PT2H` of open time.
|
|
10
|
+
* - Hours are the largest unit (`PT40H`, not `P1DT16H`): an open-time total has no calendar.
|
|
11
|
+
* Exact to the nanosecond, and elapsed time, not wall-clock distance, so a 00:00–00:00 window
|
|
12
|
+
* on a New York fall-back date adds 25 hours.
|
|
13
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
14
|
+
* - `start === end` returns `"PT0S"`.
|
|
15
|
+
* - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, `start` after
|
|
16
|
+
* `end`, a `disambiguation` that is not one of the four values, and a range spanning more than
|
|
17
|
+
* 10,000 local dates (about 27 years) counted from the date `start` falls on.
|
|
18
|
+
* - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
|
|
19
|
+
* moved by its seconds, and the moved instant must be inside Temporal's range. So within the
|
|
20
|
+
* offset's seconds (under a minute) of the first instant Temporal supports
|
|
21
|
+
* (`-271821-04-20T00:00:00Z`), for an offset west of UTC, this returns `""`. An offset to the
|
|
22
|
+
* minute has no such limit.
|
|
23
|
+
*
|
|
24
|
+
* @param start ISO 8601 instant string where the clock starts (inclusive)
|
|
25
|
+
* @param end ISO 8601 instant string where the clock stops (exclusive)
|
|
26
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
27
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
28
|
+
* @returns ISO 8601 duration string of the open time, or "" on invalid input
|
|
29
|
+
*
|
|
30
|
+
* @example operatingTimeBetween("2024-06-14T20:00:00Z", "2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "PT2H" — Friday 16:00 to Monday 10:00 local
|
|
31
|
+
* @example operatingTimeBetween("2024-06-15T00:00:00Z", "2024-06-16T00:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT0S" — a closed Saturday
|
|
32
|
+
* @example operatingTimeBetween("2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z", { timeZone: "America/New_York", weekly: { 7: [{ from: "00:00", to: "00:00" }] } }) // "PT25H" — the fall-back day
|
|
33
|
+
* @example operatingTimeBetween("2024-06-10T09:00:00Z", "2024-06-10T09:30:00.5Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT30M0.5S"
|
|
34
|
+
* @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
|
|
35
|
+
*/
|
|
36
|
+
export function operatingTimeBetween(start, end, schedule, optionsArg) {
|
|
37
|
+
try {
|
|
38
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
39
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
40
|
+
const range = parseIntervalNanoseconds({ start, end });
|
|
41
|
+
if (disambiguation === null || resolved === null || range === null) {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
const runs = scheduleRunsWithin(resolved, range, disambiguation);
|
|
45
|
+
return runs === null
|
|
46
|
+
? ""
|
|
47
|
+
: formatHourDuration(runs.reduce((total, run) => total + (run.end - run.start), 0n));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Never throws (Core Rule 3): a hostile
|
|
51
|
+
// argument is invalid input, not an exception.
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
}
|