@northguild/gmt 1.17.0 → 1.18.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 +462 -22
- package/dist/calendar/calculate/bucketRange.d.ts +3 -3
- package/dist/calendar/calculate/bucketRange.js +6 -6
- package/dist/calendar/calculate/floorToZone.d.ts +5 -3
- package/dist/calendar/calculate/floorToZone.js +6 -5
- 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 +53 -0
- package/dist/calendar/hours/addOperatingTime.js +59 -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 +39 -0
- package/dist/calendar/hours/isOpenAt.js +44 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
- package/dist/calendar/hours/nextCloseAt.js +51 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
- package/dist/calendar/hours/nextOpenAt.js +47 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
- package/dist/calendar/hours/operatingIntervals.js +52 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
- package/dist/calendar/hours/operatingTimeBetween.js +49 -0
- package/dist/calendar/hours/recurringWindows.d.ts +61 -0
- package/dist/calendar/hours/recurringWindows.js +80 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- package/dist/duration/calculate/durationAs.d.ts +13 -8
- package/dist/duration/calculate/durationAs.js +4 -8
- package/dist/duration/compare/compareDurations.d.ts +12 -6
- package/dist/duration/compare/compareDurations.js +3 -6
- 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/instant/convert/classifyLocal.d.ts +1 -1
- package/dist/instant/convert/classifyLocal.js +1 -1
- package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
- package/dist/instant/convert/fromOffsetInstant.js +3 -1
- package/dist/instant/convert/resolveLocal.d.ts +12 -7
- package/dist/instant/convert/resolveLocal.js +6 -10
- package/dist/instant/convert/toOffsetInstant.d.ts +22 -9
- package/dist/instant/convert/toOffsetInstant.js +10 -3
- package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
- package/dist/intermodal/calculate/billingTimeline.js +2 -2
- package/dist/intermodal/calculate/chargeableDays.d.ts +13 -11
- package/dist/intermodal/calculate/chargeableDays.js +4 -9
- package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
- package/dist/intermodal/calculate/demurrageClock.js +7 -7
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +5 -4
- package/dist/intermodal/calculate/freeTimeExpiry.js +6 -6
- package/dist/internal/businessCalendar.d.ts +5 -0
- package/dist/internal/businessCalendar.js +5 -1
- 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/englishCalendarNames.js +1 -2
- 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/index.d.ts +9 -4
- package/dist/internal/index.js +9 -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/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +2 -2
- package/dist/internal/normalizeTimeZone.js +2 -2
- package/dist/internal/operatingSchedule.d.ts +129 -0
- package/dist/internal/operatingSchedule.js +668 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +2 -2
- package/dist/internal/patternToken.js +28 -13
- 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/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/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- 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/utcZonedDateTime.d.ts +5 -2
- package/dist/internal/utcZonedDateTime.js +8 -5
- package/dist/internal/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- 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/zonedWallClockOperations.d.ts +26 -13
- package/dist/internal/zonedWallClockOperations.js +87 -34
- 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 +5 -8
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +1 -4
- 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 +8 -2
- 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 +7 -5
- package/dist/plain/calculate/setDate.js +1 -5
- package/dist/plain/calculate/setDateTime.d.ts +8 -5
- package/dist/plain/calculate/setDateTime.js +1 -5
- package/dist/plain/calculate/setTime.d.ts +10 -6
- package/dist/plain/calculate/setTime.js +4 -6
- 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 +8 -1
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +1 -4
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +1 -4
- 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 +21 -16
- 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 +26 -15
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +8 -5
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +21 -13
- package/dist/plain/format/formatTime.js +4 -2
- 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/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- 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/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- 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/parseDateTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateWithPattern.js +10 -7
- package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDate.js +3 -3
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
- 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/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/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 +1 -1
- package/dist/precision/convert/fromNanoseconds.js +1 -1
- 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/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 +58 -0
- package/dist/transport/calculate/crossingTime.js +76 -0
- package/dist/transport/calculate/cutoffAt.d.ts +90 -0
- package/dist/transport/calculate/cutoffAt.js +209 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
- package/dist/transport/calculate/cutoffSchedule.js +71 -0
- package/dist/transport/calculate/dwellTime.d.ts +16 -7
- package/dist/transport/calculate/dwellTime.js +12 -8
- 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 +150 -0
- package/dist/transport/calculate/scheduleDelivery.js +300 -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 +7 -0
- package/dist/transport/convert/etaAtZone.js +9 -4
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.js +1 -0
- package/dist/types/business-calendar.d.ts +19 -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/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +21 -11
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +2 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +71 -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/unix/calculate/addUnix.d.ts +19 -5
- package/dist/unix/calculate/addUnix.js +1 -5
- package/dist/unix/calculate/diffUnix.d.ts +13 -3
- package/dist/unix/calculate/diffUnix.js +1 -3
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/endOfUnix.d.ts +20 -4
- package/dist/unix/calculate/endOfUnix.js +1 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
- package/dist/unix/calculate/isBetweenUnix.js +4 -6
- package/dist/unix/calculate/roundUnix.d.ts +31 -3
- package/dist/unix/calculate/roundUnix.js +3 -6
- package/dist/unix/calculate/setUnix.d.ts +35 -9
- package/dist/unix/calculate/setUnix.js +4 -13
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/startOfUnix.d.ts +20 -4
- package/dist/unix/calculate/startOfUnix.js +1 -4
- package/dist/unix/calculate/subtractUnix.d.ts +19 -5
- package/dist/unix/calculate/subtractUnix.js +1 -5
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
- package/dist/unix/compare/areUnixEqualBy.js +13 -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 +14 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
- package/dist/unix/convert/convertUnixToZoned.js +4 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
- package/dist/unix/format/formatCalendarUnix.js +4 -5
- package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
- package/dist/unix/format/formatRelativeUnix.js +3 -5
- package/dist/unix/format/formatUnix.d.ts +24 -6
- package/dist/unix/format/formatUnix.js +8 -7
- package/dist/unix/get/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
- package/dist/unix/interval/intervalCountUnix.js +2 -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 +33 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
- package/dist/unix/interval/intervalLengthUnix.js +4 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
- 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 +42 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
- package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseDateFromUnix.js +1 -2
- package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
- package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseTimeFromUnix.js +1 -2
- package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
- package/dist/unix/parse/parseUnitFromUnix.js +2 -3
- package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
- package/dist/unix/parse/parseWeekFromUnix.js +3 -7
- package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseYearFromUnix.js +2 -2
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +1 -4
- 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 +7 -4
- package/dist/utc/calculate/setUtc.js +1 -4
- 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 +1 -4
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
- package/dist/utc/convert/convertUtcToZoned.js +1 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
- package/dist/utc/format/formatCalendarUtc.js +8 -6
- package/dist/utc/format/formatHttp.d.ts +1 -1
- package/dist/utc/format/formatHttp.js +1 -1
- package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
- package/dist/utc/format/formatRelativeUtc.js +9 -11
- package/dist/utc/format/formatUtc.d.ts +17 -15
- package/dist/utc/format/formatUtc.js +8 -8
- 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/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDateFromUtc.js +1 -3
- package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayFromUtc.js +1 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
- package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseHourFromUtc.js +1 -3
- package/dist/utc/parse/parseHttp.d.ts +1 -1
- package/dist/utc/parse/parseHttp.js +1 -1
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
- package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMonthFromUtc.js +1 -3
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseSecondFromUtc.js +1 -3
- package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
- package/dist/utc/parse/parseTimeFromUtc.js +5 -6
- package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
- package/dist/utc/parse/parseUnitFromUtc.js +6 -8
- package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
- package/dist/utc/parse/parseWeekFromUtc.js +7 -13
- package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseYearFromUtc.js +1 -3
- package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +6 -13
- 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 +25 -8
- package/dist/zoned/calculate/setZoned.js +4 -12
- 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 +6 -13
- 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 +18 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -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 +1 -1
- package/dist/zoned/convert/convertZonedToZoned.js +1 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +13 -9
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +7 -4
- 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 +12 -3
- package/dist/zoned/format/formatTimeZoneName.js +5 -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 +9 -10
- package/dist/zoned/get/getDstTransitions.js +12 -3
- package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
- package/dist/zoned/get/getTimeZoneOffset.js +6 -3
- package/dist/zoned/get/getZonedNow.d.ts +13 -1
- package/dist/zoned/get/getZonedNow.js +12 -3
- 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/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- 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 +9 -3
- package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
- package/dist/zoned/validate/hasDaylightSaving.js +47 -31
- 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 +18 -5
- package/skills/gmt-arithmetic/SKILL.md +1 -1
- package/skills/gmt-basics/SKILL.md +10 -1
- package/skills/gmt-integration/SKILL.md +10 -5
- package/skills/gmt-timezone/SKILL.md +150 -21
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → operating-schedule.js} +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
*
|
|
18
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
19
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
20
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
21
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
22
|
+
*
|
|
23
|
+
* @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
|
|
24
|
+
* @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
|
|
25
|
+
* @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
|
|
26
|
+
* @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
|
|
27
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
|
|
28
|
+
* @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
|
|
29
|
+
*/
|
|
30
|
+
export declare function nextCloseAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
31
|
+
/**
|
|
32
|
+
* How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
|
|
33
|
+
* schedule's zone, so `"P1D"` is one local day. A closing exactly at that horizon counts, and a
|
|
34
|
+
* horizon past Temporal's last instant stops there.
|
|
35
|
+
*
|
|
36
|
+
* @defaultValue `"P1Y"`
|
|
37
|
+
*/
|
|
38
|
+
within?: string;
|
|
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 could keep the schedule
|
|
44
|
+
* open past the answer.
|
|
45
|
+
*
|
|
46
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
47
|
+
*/
|
|
48
|
+
disambiguation?: Disambiguation;
|
|
49
|
+
}): string;
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
*
|
|
19
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
20
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
21
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
22
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
23
|
+
*
|
|
24
|
+
* @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
|
|
25
|
+
* @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
|
|
26
|
+
* @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
|
|
27
|
+
* @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
|
|
28
|
+
* @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
|
|
29
|
+
* @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
|
|
30
|
+
*/
|
|
31
|
+
export function nextCloseAt(isoString, schedule, optionsArg) {
|
|
32
|
+
try {
|
|
33
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
34
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
35
|
+
const from = parseInstantNanoseconds(isoString);
|
|
36
|
+
if (disambiguation === null || resolved === null || from === null) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
|
|
40
|
+
if (horizon === null) {
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
const answer = firstClosedInstant(resolved, from, horizon, disambiguation);
|
|
44
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Never throws (Core Rule 3): a hostile
|
|
48
|
+
// argument is invalid input, not an exception.
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
*
|
|
15
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
16
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
17
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
18
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
19
|
+
*
|
|
20
|
+
* @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
|
|
21
|
+
* @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
|
|
22
|
+
* @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
|
|
23
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
|
|
24
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
|
|
25
|
+
*/
|
|
26
|
+
export declare function nextOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
27
|
+
/**
|
|
28
|
+
* How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
|
|
29
|
+
* schedule's zone, so `"P1D"` is one local day. An opening exactly at that horizon counts, and a
|
|
30
|
+
* horizon past Temporal's last instant stops there.
|
|
31
|
+
*
|
|
32
|
+
* @defaultValue `"P1Y"`
|
|
33
|
+
*/
|
|
34
|
+
within?: string;
|
|
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 `""` when a window with such an edge could open before the
|
|
40
|
+
* answer.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
43
|
+
*/
|
|
44
|
+
disambiguation?: Disambiguation;
|
|
45
|
+
}): string;
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
*
|
|
16
|
+
* @param isoString ISO 8601 instant string to search from, inclusive
|
|
17
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
18
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
19
|
+
* @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
|
|
20
|
+
*
|
|
21
|
+
* @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
|
|
22
|
+
* @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
|
|
23
|
+
* @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
|
|
24
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
|
|
25
|
+
* @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
|
|
26
|
+
*/
|
|
27
|
+
export function nextOpenAt(isoString, schedule, optionsArg) {
|
|
28
|
+
try {
|
|
29
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
30
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
31
|
+
const from = parseInstantNanoseconds(isoString);
|
|
32
|
+
if (disambiguation === null || resolved === null || from === null) {
|
|
33
|
+
return "";
|
|
34
|
+
}
|
|
35
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
|
|
36
|
+
if (horizon === null) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
const answer = firstOpenInstant(resolved, from, horizon, disambiguation);
|
|
40
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Never throws (Core Rule 3): a hostile
|
|
44
|
+
// argument is invalid input, not an exception.
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
*
|
|
22
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
23
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
|
|
24
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
25
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
26
|
+
*
|
|
27
|
+
* @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
|
|
28
|
+
* @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
|
|
29
|
+
* @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
|
|
30
|
+
* @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
|
|
31
|
+
* @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
|
|
32
|
+
*/
|
|
33
|
+
export declare function operatingIntervals(schedule: OperatingSchedule, range: Interval, optionsArg?: {
|
|
34
|
+
/**
|
|
35
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
36
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
37
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
38
|
+
* both cases. `"reject"` returns `[]` when a window with such an edge reaches the range.
|
|
39
|
+
*
|
|
40
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
41
|
+
*/
|
|
42
|
+
disambiguation?: Disambiguation;
|
|
43
|
+
}): Interval[];
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
*
|
|
23
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
24
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
|
|
25
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
26
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
27
|
+
*
|
|
28
|
+
* @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
|
|
29
|
+
* @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
|
|
30
|
+
* @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
|
|
31
|
+
* @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
|
|
32
|
+
* @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
|
|
33
|
+
*/
|
|
34
|
+
export function operatingIntervals(schedule, range, optionsArg) {
|
|
35
|
+
try {
|
|
36
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
37
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
38
|
+
const bounds = parseIntervalNanoseconds(range);
|
|
39
|
+
if (disambiguation === null || resolved === null || bounds === null) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const runs = scheduleRunsWithin(resolved, bounds, disambiguation);
|
|
43
|
+
return runs === null
|
|
44
|
+
? []
|
|
45
|
+
: runs.map((run) => ({ start: run.startText, end: run.endText }));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Never throws (Core Rule 3): a hostile
|
|
49
|
+
// argument is invalid input, not an exception.
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
*
|
|
18
|
+
* @param start ISO 8601 instant string where the clock starts (inclusive)
|
|
19
|
+
* @param end ISO 8601 instant string where the clock stops (exclusive)
|
|
20
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
21
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
22
|
+
* @returns ISO 8601 duration string of the open time, or "" on invalid input
|
|
23
|
+
*
|
|
24
|
+
* @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
|
|
25
|
+
* @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
|
|
26
|
+
* @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
|
|
27
|
+
* @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"
|
|
28
|
+
* @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
|
|
29
|
+
*/
|
|
30
|
+
export declare function operatingTimeBetween(start: string, end: string, schedule: OperatingSchedule, optionsArg?: {
|
|
31
|
+
/**
|
|
32
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
33
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
34
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
35
|
+
* both cases. `"reject"` returns `""` when a window with such an edge reaches the range.
|
|
36
|
+
*
|
|
37
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
38
|
+
*/
|
|
39
|
+
disambiguation?: Disambiguation;
|
|
40
|
+
}): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
*
|
|
19
|
+
* @param start ISO 8601 instant string where the clock starts (inclusive)
|
|
20
|
+
* @param end ISO 8601 instant string where the clock stops (exclusive)
|
|
21
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
22
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
23
|
+
* @returns ISO 8601 duration string of the open time, or "" on invalid input
|
|
24
|
+
*
|
|
25
|
+
* @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
|
|
26
|
+
* @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
|
|
27
|
+
* @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
|
|
28
|
+
* @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"
|
|
29
|
+
* @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
|
|
30
|
+
*/
|
|
31
|
+
export function operatingTimeBetween(start, end, schedule, optionsArg) {
|
|
32
|
+
try {
|
|
33
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
34
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
35
|
+
const range = parseIntervalNanoseconds({ start, end });
|
|
36
|
+
if (disambiguation === null || resolved === null || range === null) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
const runs = scheduleRunsWithin(resolved, range, disambiguation);
|
|
40
|
+
return runs === null
|
|
41
|
+
? ""
|
|
42
|
+
: formatHourDuration(runs.reduce((total, run) => total + (run.end - run.start), 0n));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Never throws (Core Rule 3): a hostile
|
|
46
|
+
// argument is invalid input, not an exception.
|
|
47
|
+
return "";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Disambiguation, Interval, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the instants a weekly pattern of local windows is open inside `range`, read in
|
|
4
|
+
* `timeZone`: the primitive under operating hours, curfews and recurring crew windows.
|
|
5
|
+
*
|
|
6
|
+
* - `weekly` maps ISO weekdays (1 = Monday … 7 = Sunday) to `LocalWindow`s of wall time. A
|
|
7
|
+
* window whose `to` is at or before its `from` wraps past midnight and belongs to the date it
|
|
8
|
+
* starts on: `{ from: "23:00", to: "06:00" }` under 5 is Friday 23:00 to Saturday 06:00, and
|
|
9
|
+
* `{ from: "00:00", to: "00:00" }` is the whole day. No holidays or overrides; see
|
|
10
|
+
* `operatingIntervals` for those.
|
|
11
|
+
* - Each window edge is a local wall time resolved with `resolveLocal`. An edge in a skipped
|
|
12
|
+
* spring-forward hour is shifted by the gap: forward, or back when it is read `"earlier"` (TC39
|
|
13
|
+
* DisambiguatePossibleEpochNanoseconds), so in a zone that skips midnight a date's early
|
|
14
|
+
* window can open on the previous local date, before the date's own first instant; it still
|
|
15
|
+
* belongs to its own date.
|
|
16
|
+
* - A window "reaches the range" for `"reject"` when the widest span it could cover (its `from`
|
|
17
|
+
* read `"earlier"`, its `to` read `"later"`) overlaps `range`. A rejected window elsewhere
|
|
18
|
+
* does not matter.
|
|
19
|
+
* - Windows are elapsed time between their resolved edges, so the wall-clock length is not the
|
|
20
|
+
* real one on transition nights: in New York, 23:00–06:00 is 8 hours across the fall-back
|
|
21
|
+
* night and 6 across the spring-forward one, and 00:00–00:00 is 25 and 23 hours.
|
|
22
|
+
* - A window whose edges resolve to an empty or inverted span on a transition night — only a
|
|
23
|
+
* window shorter than the gap it straddles — is empty that day and left out.
|
|
24
|
+
* - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
|
|
25
|
+
* touch, so a run of whole-day windows is one interval. Endpoints are UTC instants ending in
|
|
26
|
+
* `Z`, except a clipped edge, which is `range`'s own string.
|
|
27
|
+
* - Local dates follow the zone's real days: a date the zone deleted (`Pacific/Apia` skipped
|
|
28
|
+
* 2011-12-30) has no windows, and a date re-entered after a fall-back is counted once.
|
|
29
|
+
* - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
|
|
30
|
+
* - Returns `[]` when `weekly` has a key other than `"1"`–`"7"` or a malformed window, when
|
|
31
|
+
* `range` is not a valid `Interval`, when `timeZone` is invalid, when `disambiguation` is not
|
|
32
|
+
* one of the four values, and when the range spans more than 10,000 local dates (about 27
|
|
33
|
+
* years) counted from the date `range.start` falls on, rather than a truncated list.
|
|
34
|
+
*
|
|
35
|
+
* @param weekly windows by ISO weekday, `{ 1: [{ from: "09:00", to: "17:00" }], … }`
|
|
36
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the pattern inside
|
|
37
|
+
* @param timeZone IANA name or UTC offset the windows are read in
|
|
38
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
39
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
40
|
+
*
|
|
41
|
+
* @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-06-10T13:00:00Z", end: "2024-06-10T21:00:00Z" }]
|
|
42
|
+
* @example recurringWindows({ 5: [{ from: "23:00", to: "06:00" }] }, { start: "2024-06-14T00:00:00Z", end: "2024-06-16T00:00:00Z" }, "UTC") // [{ start: "2024-06-14T23:00:00Z", end: "2024-06-15T06:00:00Z" }] — Friday night into Saturday
|
|
43
|
+
* @example recurringWindows({ 6: [{ from: "23:00", to: "06:00" }] }, { start: "2024-11-02T00:00:00Z", end: "2024-11-04T00:00:00Z" }, "America/New_York") // [{ start: "2024-11-03T03:00:00Z", end: "2024-11-03T11:00:00Z" }] — 8 hours across the fall-back night
|
|
44
|
+
* @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-03-10T07:30:00Z", end: "2024-03-10T08:00:00Z" }] — 02:30 does not exist; "compatible" reads it as 03:30
|
|
45
|
+
* @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York", { disambiguation: "reject" }) // []
|
|
46
|
+
* @example recurringWindows({ 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-13T00:00:00Z" }, "UTC") // [{ start: "2024-06-10T00:00:00Z", end: "2024-06-12T00:00:00Z" }] — touching days merge
|
|
47
|
+
* @example recurringWindows({ 8: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — not an ISO weekday
|
|
48
|
+
* @example recurringWindows({ 1: [{ from: "9am", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — malformed window
|
|
49
|
+
* @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "Invalid/Zone") // []
|
|
50
|
+
*/
|
|
51
|
+
export declare function recurringWindows(weekly: OperatingSchedule["weekly"], range: Interval, timeZone: string, optionsArg?: {
|
|
52
|
+
/**
|
|
53
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
54
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
55
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
56
|
+
* both cases. `"reject"` returns `[]` when a window with such an edge reaches the range.
|
|
57
|
+
*
|
|
58
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
59
|
+
*/
|
|
60
|
+
disambiguation?: Disambiguation;
|
|
61
|
+
}): Interval[];
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { parseIntervalNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { parseScheduleDisambiguation, parseWeeklyPattern, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
import { isValidTimeZone } from "../../zoned/validate/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Return the instants a weekly pattern of local windows is open inside `range`, read in
|
|
6
|
+
* `timeZone`: the primitive under operating hours, curfews and recurring crew windows.
|
|
7
|
+
*
|
|
8
|
+
* - `weekly` maps ISO weekdays (1 = Monday … 7 = Sunday) to `LocalWindow`s of wall time. A
|
|
9
|
+
* window whose `to` is at or before its `from` wraps past midnight and belongs to the date it
|
|
10
|
+
* starts on: `{ from: "23:00", to: "06:00" }` under 5 is Friday 23:00 to Saturday 06:00, and
|
|
11
|
+
* `{ from: "00:00", to: "00:00" }` is the whole day. No holidays or overrides; see
|
|
12
|
+
* `operatingIntervals` for those.
|
|
13
|
+
* - Each window edge is a local wall time resolved with `resolveLocal`. An edge in a skipped
|
|
14
|
+
* spring-forward hour is shifted by the gap: forward, or back when it is read `"earlier"` (TC39
|
|
15
|
+
* DisambiguatePossibleEpochNanoseconds), so in a zone that skips midnight a date's early
|
|
16
|
+
* window can open on the previous local date, before the date's own first instant; it still
|
|
17
|
+
* belongs to its own date.
|
|
18
|
+
* - A window "reaches the range" for `"reject"` when the widest span it could cover (its `from`
|
|
19
|
+
* read `"earlier"`, its `to` read `"later"`) overlaps `range`. A rejected window elsewhere
|
|
20
|
+
* does not matter.
|
|
21
|
+
* - Windows are elapsed time between their resolved edges, so the wall-clock length is not the
|
|
22
|
+
* real one on transition nights: in New York, 23:00–06:00 is 8 hours across the fall-back
|
|
23
|
+
* night and 6 across the spring-forward one, and 00:00–00:00 is 25 and 23 hours.
|
|
24
|
+
* - A window whose edges resolve to an empty or inverted span on a transition night — only a
|
|
25
|
+
* window shorter than the gap it straddles — is empty that day and left out.
|
|
26
|
+
* - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
|
|
27
|
+
* touch, so a run of whole-day windows is one interval. Endpoints are UTC instants ending in
|
|
28
|
+
* `Z`, except a clipped edge, which is `range`'s own string.
|
|
29
|
+
* - Local dates follow the zone's real days: a date the zone deleted (`Pacific/Apia` skipped
|
|
30
|
+
* 2011-12-30) has no windows, and a date re-entered after a fall-back is counted once.
|
|
31
|
+
* - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
|
|
32
|
+
* - Returns `[]` when `weekly` has a key other than `"1"`–`"7"` or a malformed window, when
|
|
33
|
+
* `range` is not a valid `Interval`, when `timeZone` is invalid, when `disambiguation` is not
|
|
34
|
+
* one of the four values, and when the range spans more than 10,000 local dates (about 27
|
|
35
|
+
* years) counted from the date `range.start` falls on, rather than a truncated list.
|
|
36
|
+
*
|
|
37
|
+
* @param weekly windows by ISO weekday, `{ 1: [{ from: "09:00", to: "17:00" }], … }`
|
|
38
|
+
* @param range `{ start, end }` record of ISO 8601 instant strings to expand the pattern inside
|
|
39
|
+
* @param timeZone IANA name or UTC offset the windows are read in
|
|
40
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
41
|
+
* @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
|
|
42
|
+
*
|
|
43
|
+
* @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-06-10T13:00:00Z", end: "2024-06-10T21:00:00Z" }]
|
|
44
|
+
* @example recurringWindows({ 5: [{ from: "23:00", to: "06:00" }] }, { start: "2024-06-14T00:00:00Z", end: "2024-06-16T00:00:00Z" }, "UTC") // [{ start: "2024-06-14T23:00:00Z", end: "2024-06-15T06:00:00Z" }] — Friday night into Saturday
|
|
45
|
+
* @example recurringWindows({ 6: [{ from: "23:00", to: "06:00" }] }, { start: "2024-11-02T00:00:00Z", end: "2024-11-04T00:00:00Z" }, "America/New_York") // [{ start: "2024-11-03T03:00:00Z", end: "2024-11-03T11:00:00Z" }] — 8 hours across the fall-back night
|
|
46
|
+
* @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-03-10T07:30:00Z", end: "2024-03-10T08:00:00Z" }] — 02:30 does not exist; "compatible" reads it as 03:30
|
|
47
|
+
* @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York", { disambiguation: "reject" }) // []
|
|
48
|
+
* @example recurringWindows({ 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-13T00:00:00Z" }, "UTC") // [{ start: "2024-06-10T00:00:00Z", end: "2024-06-12T00:00:00Z" }] — touching days merge
|
|
49
|
+
* @example recurringWindows({ 8: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — not an ISO weekday
|
|
50
|
+
* @example recurringWindows({ 1: [{ from: "9am", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — malformed window
|
|
51
|
+
* @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "Invalid/Zone") // []
|
|
52
|
+
*/
|
|
53
|
+
export function recurringWindows(weekly, range, timeZone, optionsArg) {
|
|
54
|
+
try {
|
|
55
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
56
|
+
const weeklyWindows = parseWeeklyPattern(weekly);
|
|
57
|
+
const bounds = parseIntervalNanoseconds(range);
|
|
58
|
+
if (disambiguation === null ||
|
|
59
|
+
weeklyWindows === null ||
|
|
60
|
+
bounds === null ||
|
|
61
|
+
typeof timeZone !== "string" ||
|
|
62
|
+
!isValidTimeZone(timeZone)) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const runs = scheduleRunsWithin({
|
|
66
|
+
timeZone,
|
|
67
|
+
weekly: weeklyWindows,
|
|
68
|
+
holidays: new Set(),
|
|
69
|
+
overrides: new Map(),
|
|
70
|
+
}, bounds, disambiguation);
|
|
71
|
+
return runs === null
|
|
72
|
+
? []
|
|
73
|
+
: runs.map((run) => ({ start: run.startText, end: run.endText }));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Never throws (Core Rule 3): a hostile
|
|
77
|
+
// argument is invalid input, not an exception.
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
package/dist/calendar/index.d.ts
CHANGED
package/dist/calendar/index.js
CHANGED
|
@@ -7,16 +7,12 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
|
|
|
7
7
|
* durationAs("P1DT2H30M", "hours") is 26.5, not the 2 that `getDurationUnit` reads.
|
|
8
8
|
* - The result is fractional, not rounded: durationAs("P1DT2H30M", "days") is
|
|
9
9
|
* 1.1041666666666667. Round it yourself, or reach for `normalizeDuration` instead.
|
|
10
|
-
* - `relativeTo` is
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* documented gap `normalizeDuration` (A3) carries; `addDuration`/`subtractDuration` (A2)
|
|
14
|
-
* have it worse still, since Temporal gives them no `relativeTo` option at all.
|
|
10
|
+
* - The calendar-unit rule of `relativeTo` is the same one `normalizeDuration` (A3) carries;
|
|
11
|
+
* `addDuration`/`subtractDuration` (A2) have it worse still, since Temporal gives them no
|
|
12
|
+
* `relativeTo` option at all.
|
|
15
13
|
* - The requested-unit half of that rule bites even on day/time-only input: "P1DT2H30M" has
|
|
16
14
|
* no calendar component, yet durationAs("P1DT2H30M", "weeks") is still null — a week is a
|
|
17
15
|
* calendar quantity to Temporal regardless of what it is being measured from.
|
|
18
|
-
* - `relativeTo` changes the answer for non-calendar units too when it names a zoned instant:
|
|
19
|
-
* a day spanning a DST spring-forward transition totals 23 hours, not 24.
|
|
20
16
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
21
17
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
22
18
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -39,7 +35,7 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
|
|
|
39
35
|
*
|
|
40
36
|
* @param value ISO 8601 duration string
|
|
41
37
|
* @param unit DateTimeDurationUnit to total into ("years" | "months" | "weeks" | "days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds", or the singular name)
|
|
42
|
-
* @param options
|
|
38
|
+
* @param options The anchor calendar units are measured from
|
|
43
39
|
* @returns the fractional total in `unit`, or null on invalid input
|
|
44
40
|
*
|
|
45
41
|
* @example durationAs("P1DT2H30M", "hours") // 26.5
|
|
@@ -58,5 +54,14 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
|
|
|
58
54
|
* @example durationAs("P1M", "days", { relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // 30 (a date-time without a zone reads as its date, as Temporal reads relativeTo)
|
|
59
55
|
*/
|
|
60
56
|
export declare function durationAs(value: string, unit: DateTimeDurationUnit | Temporal.DateTimeUnit, options?: {
|
|
57
|
+
/**
|
|
58
|
+
* The date or zoned date-time the duration is measured from. It is required whenever a year,
|
|
59
|
+
* month or week is involved, as the `unit` asked for or as a nonzero field of the duration.
|
|
60
|
+
* With a zoned value, days follow that zone's clock changes, so a day spanning a
|
|
61
|
+
* spring-forward transition totals 23 hours.
|
|
62
|
+
*
|
|
63
|
+
* @defaultValue None. Days are 24 hours, and a duration or `unit` that involves a year, month
|
|
64
|
+
* or week returns `null`.
|
|
65
|
+
*/
|
|
61
66
|
relativeTo?: DurationRelativeTo;
|
|
62
67
|
}): number | null;
|