@northguild/gmt 1.16.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 +742 -21
- 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/index.d.ts +2 -0
- package/dist/index.js +2 -0
- 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 +6 -12
- package/dist/instant/convert/resolveLocal.d.ts +12 -7
- package/dist/instant/convert/resolveLocal.js +6 -10
- package/dist/instant/convert/toOffsetInstant.d.ts +37 -1
- package/dist/instant/convert/toOffsetInstant.js +12 -28
- package/dist/intermodal/calculate/billingTimeline.d.ts +114 -0
- package/dist/intermodal/calculate/billingTimeline.js +168 -0
- package/dist/intermodal/calculate/chargeableDays.d.ts +100 -0
- package/dist/intermodal/calculate/chargeableDays.js +96 -0
- package/dist/intermodal/calculate/demurrageClock.d.ts +102 -0
- package/dist/intermodal/calculate/demurrageClock.js +140 -0
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +67 -0
- package/dist/intermodal/calculate/freeTimeExpiry.js +82 -0
- package/dist/intermodal/calculate/index.d.ts +4 -0
- package/dist/intermodal/calculate/index.js +4 -0
- package/dist/intermodal/index.d.ts +2 -0
- package/dist/intermodal/index.js +3 -0
- 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/freeTimeLedger.d.ts +93 -0
- package/dist/internal/freeTimeLedger.js +262 -0
- package/dist/internal/index.d.ts +10 -3
- package/dist/internal/index.js +10 -3
- 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/isoStringBody.d.ts +26 -0
- package/dist/internal/isoStringBody.js +22 -2
- 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/wallClockAtOffset.d.ts +22 -0
- package/dist/internal/wallClockAtOffset.js +26 -0
- 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/zonedWallClockDifference.js +5 -4
- 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 +81 -0
- package/dist/transport/calculate/dwellTime.js +130 -0
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +10 -0
- package/dist/transport/calculate/index.js +10 -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 +71 -0
- package/dist/transport/calculate/transitTime.js +101 -0
- 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 +43 -0
- package/dist/transport/convert/etaAtZone.js +58 -0
- package/dist/transport/convert/index.d.ts +1 -0
- package/dist/transport/convert/index.js +1 -0
- package/dist/transport/index.d.ts +4 -0
- package/dist/transport/index.js +5 -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 +44 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +3 -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/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/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 +53 -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 +210 -14
- 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 → free-time-options.js} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { normalizeDateTime, zonedDateTimeFrom } from "../../internal/index.js";
|
|
2
2
|
import { instantFormatOptions } from "../../internal/instantFormatOptions.js";
|
|
3
3
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
4
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Format a zoned datetime range using the Temporal Intl.DateTimeFormat formatRange API.
|
|
6
7
|
*
|
|
@@ -61,7 +62,7 @@ export function formatZonedRange(from, to, locale, options) {
|
|
|
61
62
|
// an Instant format resolves to (GetDateTimeFormat ~any~, ~all~, ~all~), so
|
|
62
63
|
// the requested fields and widths are kept. A `timeZone` option is rejected
|
|
63
64
|
// rather than silently overridden.
|
|
64
|
-
const formatOptions = instantFormatOptions(options
|
|
65
|
+
const formatOptions = instantFormatOptions(readDateTimeFormatOptions(options), zdt1.timeZoneId, "all");
|
|
65
66
|
if (formatOptions === null) {
|
|
66
67
|
return "";
|
|
67
68
|
}
|
|
@@ -5,8 +5,7 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
|
|
|
5
5
|
* - This is GMT's substitute for a token formatter (Luxon `toFormat`, date-fns
|
|
6
6
|
* `format`). A token pattern hard-codes field order and ships US ordering to
|
|
7
7
|
* every locale; `formatToParts` gives the caller full control over presentation
|
|
8
|
-
* while the *locale* keeps control of order.
|
|
9
|
-
* `context/roadmap/issues/J.md`.
|
|
8
|
+
* while the *locale* keeps control of order.
|
|
10
9
|
* - Each part is `{ type, value }` where `type` can be:
|
|
11
10
|
* `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
|
|
12
11
|
* `"hour"`, `"minute"`, `"second"`, `"fractionalSecond"`, `"dayPeriod"`,
|
|
@@ -24,8 +23,11 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
|
|
|
24
23
|
* whitespace normalisation.
|
|
25
24
|
* - A ZonedDateTime is formatted in its own zone: a `timeZone` option returns
|
|
26
25
|
* `[]`, as `ZonedDateTime#toLocaleString` throws a TypeError for one.
|
|
27
|
-
* -
|
|
28
|
-
*
|
|
26
|
+
* - The literal before the day period depends on the runtime. CLDR 42 (ICU 72) put U+202F NARROW
|
|
27
|
+
* NO-BREAK SPACE there for `en-US`; Node 22 and 24 return it in the parts, and Node 26 returns
|
|
28
|
+
* an ordinary space (U+0020) instead. Both were checked on those runtimes. The examples show the
|
|
29
|
+
* Node 22 and 24 form, written as `"\u202f"` so the difference is visible. Treat the two
|
|
30
|
+
* characters as equal when you compare parts.
|
|
29
31
|
* - Returns `[]` for invalid input.
|
|
30
32
|
* - **Compatibility:** before 1.16.0 a call with no field options returned only the date parts, with
|
|
31
33
|
* no time zone name. Pass `{ year: "numeric", month: "numeric", day: "numeric" }` to keep that output.
|
|
@@ -48,6 +50,15 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
|
|
|
48
50
|
* @example formatZonedToParts("2024-02-03T14:30:00-05:00[America/New_York]", "en-US", null as never) // [] (null options, as ECMA-402 rejects them)
|
|
49
51
|
*/
|
|
50
52
|
export declare function formatZonedToParts(value: string, locale?: string | string[], options?: DateTimeFormatOptions): Array<{
|
|
53
|
+
/**
|
|
54
|
+
* The kind of part, named as ECMA-402 `Intl.DateTimeFormat.prototype.formatToParts` names it: a
|
|
55
|
+
* field such as `"year"`, `"month"` or `"day"`, or `"literal"` for the separator text between
|
|
56
|
+
* fields.
|
|
57
|
+
*/
|
|
51
58
|
type: string;
|
|
59
|
+
/**
|
|
60
|
+
* The text of the part in the requested locale, exactly as the formatter wrote it. Joining every
|
|
61
|
+
* `value` in array order gives the whole formatted text.
|
|
62
|
+
*/
|
|
52
63
|
value: string;
|
|
53
64
|
}>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
2
2
|
import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
3
3
|
import { instantFormatOptions } from "../../internal/instantFormatOptions.js";
|
|
4
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Return the locale-formatted parts of a ZonedDateTime.
|
|
6
7
|
*
|
|
7
8
|
* - This is GMT's substitute for a token formatter (Luxon `toFormat`, date-fns
|
|
8
9
|
* `format`). A token pattern hard-codes field order and ships US ordering to
|
|
9
10
|
* every locale; `formatToParts` gives the caller full control over presentation
|
|
10
|
-
* while the *locale* keeps control of order.
|
|
11
|
-
* `context/roadmap/issues/J.md`.
|
|
11
|
+
* while the *locale* keeps control of order.
|
|
12
12
|
* - Each part is `{ type, value }` where `type` can be:
|
|
13
13
|
* `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
|
|
14
14
|
* `"hour"`, `"minute"`, `"second"`, `"fractionalSecond"`, `"dayPeriod"`,
|
|
@@ -26,8 +26,11 @@ import { instantFormatOptions } from "../../internal/instantFormatOptions.js";
|
|
|
26
26
|
* whitespace normalisation.
|
|
27
27
|
* - A ZonedDateTime is formatted in its own zone: a `timeZone` option returns
|
|
28
28
|
* `[]`, as `ZonedDateTime#toLocaleString` throws a TypeError for one.
|
|
29
|
-
* -
|
|
30
|
-
*
|
|
29
|
+
* - The literal before the day period depends on the runtime. CLDR 42 (ICU 72) put U+202F NARROW
|
|
30
|
+
* NO-BREAK SPACE there for `en-US`; Node 22 and 24 return it in the parts, and Node 26 returns
|
|
31
|
+
* an ordinary space (U+0020) instead. Both were checked on those runtimes. The examples show the
|
|
32
|
+
* Node 22 and 24 form, written as `"\u202f"` so the difference is visible. Treat the two
|
|
33
|
+
* characters as equal when you compare parts.
|
|
31
34
|
* - Returns `[]` for invalid input.
|
|
32
35
|
* - **Compatibility:** before 1.16.0 a call with no field options returned only the date parts, with
|
|
33
36
|
* no time zone name. Pass `{ year: "numeric", month: "numeric", day: "numeric" }` to keep that output.
|
|
@@ -63,7 +66,7 @@ export function formatZonedToParts(value, locale, options) {
|
|
|
63
66
|
// formatter's timeZone, with the options ZonedDateTime#toLocaleString
|
|
64
67
|
// resolves to (GetDateTimeFormat ~any~, ~zoned-date-time~, ~all~).
|
|
65
68
|
const zonedDateTime = zonedDateTimeFrom(value);
|
|
66
|
-
const resolved = instantFormatOptions(options
|
|
69
|
+
const resolved = instantFormatOptions(readDateTimeFormatOptions(options), zonedDateTime.timeZoneId, "zoned-date-time");
|
|
67
70
|
if (resolved === null) {
|
|
68
71
|
return [];
|
|
69
72
|
}
|
|
@@ -2,14 +2,6 @@
|
|
|
2
2
|
* A single DST transition instant: the UTC instant of an offset change plus the
|
|
3
3
|
* offset in effect immediately before and after it.
|
|
4
4
|
*
|
|
5
|
-
* @remarks Members:
|
|
6
|
-
*
|
|
7
|
-
* | Member | Type | Description |
|
|
8
|
-
* | --- | --- | --- |
|
|
9
|
-
* | `instant` | `string` | UTC instant of the offset change, ISO 8601 ending in `Z` (e.g. `2024-03-10T07:00:00Z`). |
|
|
10
|
-
* | `offsetBefore` | `string` | UTC offset in effect immediately before the transition (e.g. `-05:00`). |
|
|
11
|
-
* | `offsetAfter` | `string` | UTC offset in effect immediately after the transition (e.g. `-04:00`). |
|
|
12
|
-
*
|
|
13
5
|
* @example
|
|
14
6
|
* import { DstTransition } from "@northguild/gmt/zoned";
|
|
15
7
|
* const t: DstTransition = {
|
|
@@ -19,12 +11,16 @@
|
|
|
19
11
|
* };
|
|
20
12
|
*/
|
|
21
13
|
export interface DstTransition {
|
|
14
|
+
/** The UTC instant of the offset change, ISO 8601 ending in `Z` (e.g. `2024-03-10T07:00:00Z`). */
|
|
22
15
|
instant: string;
|
|
16
|
+
/** The UTC offset in effect immediately before the transition (e.g. `-05:00`). */
|
|
23
17
|
offsetBefore: string;
|
|
18
|
+
/** The UTC offset in effect immediately after the transition (e.g. `-04:00`). */
|
|
24
19
|
offsetAfter: string;
|
|
25
20
|
}
|
|
26
21
|
/**
|
|
27
|
-
* List every DST transition instant for an IANA
|
|
22
|
+
* List every DST transition instant for a time zone (an IANA name or a UTC offset) within a
|
|
23
|
+
* given year.
|
|
28
24
|
*
|
|
29
25
|
* - A "transition" is any UTC offset change: a spring-forward gap (nonexistent
|
|
30
26
|
* local time) or a fall-back overlap (ambiguous local time) — see
|
|
@@ -39,8 +35,10 @@ export interface DstTransition {
|
|
|
39
35
|
* - Returns `[]` for an invalid timeZone, a non-integer year, or a valid zone
|
|
40
36
|
* with zero transitions in that year (not an error case), and when the scan
|
|
41
37
|
* exhausts its internal bound — never a partial list.
|
|
38
|
+
* - A UTC offset such as `"+05:30"` is a valid zone whose offset never changes,
|
|
39
|
+
* so it has no transitions and returns `[]` for every year.
|
|
42
40
|
*
|
|
43
|
-
* @param timeZone IANA
|
|
41
|
+
* @param timeZone IANA name or UTC offset
|
|
44
42
|
* @param year calendar year to scan (must be an integer)
|
|
45
43
|
* @returns array of `{ instant, offsetBefore, offsetAfter }`, in chronological order
|
|
46
44
|
*
|
|
@@ -52,6 +50,7 @@ export interface DstTransition {
|
|
|
52
50
|
* @example getDstTransitions("Asia/Singapore", 1982)
|
|
53
51
|
* // [{ instant: "1981-12-31T16:00:00Z", offsetBefore: "+07:30", offsetAfter: "+08:00" }]
|
|
54
52
|
* @example getDstTransitions("Asia/Tokyo", 2024) // []
|
|
53
|
+
* @example getDstTransitions("+05:30", 2024) // [] (a fixed offset has no transitions)
|
|
55
54
|
* @example getDstTransitions("Invalid/Zone", 2024) // []
|
|
56
55
|
*/
|
|
57
56
|
export declare function getDstTransitions(timeZone: string, year: number): DstTransition[];
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { isValidTimeZone } from "../validate/index.js";
|
|
2
2
|
import { zonedDateTimeFrom, zonedNextTransition, zonedStartOfDay, } from "../../internal/index.js";
|
|
3
3
|
const MAX_TRANSITIONS_PER_YEAR = 20;
|
|
4
|
+
/** 368 days: a 366-day year plus a day at each end for the zone's offset. */
|
|
5
|
+
const SEARCH_SPAN_NANOSECONDS = 368n * 86400000000000n;
|
|
4
6
|
/**
|
|
5
|
-
* List every DST transition instant for an IANA
|
|
7
|
+
* List every DST transition instant for a time zone (an IANA name or a UTC offset) within a
|
|
8
|
+
* given year.
|
|
6
9
|
*
|
|
7
10
|
* - A "transition" is any UTC offset change: a spring-forward gap (nonexistent
|
|
8
11
|
* local time) or a fall-back overlap (ambiguous local time) — see
|
|
@@ -17,8 +20,10 @@ const MAX_TRANSITIONS_PER_YEAR = 20;
|
|
|
17
20
|
* - Returns `[]` for an invalid timeZone, a non-integer year, or a valid zone
|
|
18
21
|
* with zero transitions in that year (not an error case), and when the scan
|
|
19
22
|
* exhausts its internal bound — never a partial list.
|
|
23
|
+
* - A UTC offset such as `"+05:30"` is a valid zone whose offset never changes,
|
|
24
|
+
* so it has no transitions and returns `[]` for every year.
|
|
20
25
|
*
|
|
21
|
-
* @param timeZone IANA
|
|
26
|
+
* @param timeZone IANA name or UTC offset
|
|
22
27
|
* @param year calendar year to scan (must be an integer)
|
|
23
28
|
* @returns array of `{ instant, offsetBefore, offsetAfter }`, in chronological order
|
|
24
29
|
*
|
|
@@ -30,6 +35,7 @@ const MAX_TRANSITIONS_PER_YEAR = 20;
|
|
|
30
35
|
* @example getDstTransitions("Asia/Singapore", 1982)
|
|
31
36
|
* // [{ instant: "1981-12-31T16:00:00Z", offsetBefore: "+07:30", offsetAfter: "+08:00" }]
|
|
32
37
|
* @example getDstTransitions("Asia/Tokyo", 2024) // []
|
|
38
|
+
* @example getDstTransitions("+05:30", 2024) // [] (a fixed offset has no transitions)
|
|
33
39
|
* @example getDstTransitions("Invalid/Zone", 2024) // []
|
|
34
40
|
*/
|
|
35
41
|
export function getDstTransitions(timeZone, year) {
|
|
@@ -40,11 +46,14 @@ export function getDstTransitions(timeZone, year) {
|
|
|
40
46
|
// getTimeZoneTransition("next") is strictly after its receiver, so start 1ns before the
|
|
41
47
|
// year opens to catch a transition landing exactly on local January 1 00:00.
|
|
42
48
|
let cur = zonedStartOfDay(zonedDateTimeFrom({ year, month: 1, day: 1, timeZone })).subtract({ nanoseconds: 1 });
|
|
49
|
+
// A calendar year is at most 366 days and an offset is under a day, so no search needs to
|
|
50
|
+
// read past this.
|
|
51
|
+
const searchEnd = cur.epochNanoseconds + SEARCH_SPAN_NANOSECONDS;
|
|
43
52
|
const transitions = [];
|
|
44
53
|
// `<=`: up to MAX in-year transitions are pushed, plus one more lookup to observe the scan
|
|
45
54
|
// leaving the year.
|
|
46
55
|
for (let i = 0; i <= MAX_TRANSITIONS_PER_YEAR; i++) {
|
|
47
|
-
const next = zonedNextTransition(cur);
|
|
56
|
+
const next = zonedNextTransition(cur, searchEnd);
|
|
48
57
|
if (!next || next.year > year) {
|
|
49
58
|
return transitions;
|
|
50
59
|
}
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
* - The instant is ISO 8601 extended format before any annotation (`<date>T<time>`, then `Z` or
|
|
15
15
|
* `±HH:MM[:SS[.fraction]]`): basic format, a `t` or space separator, a lower-case `z` and an
|
|
16
16
|
* hour-only offset return "".
|
|
17
|
+
* - Only the instant is read from `instant`, as `isValidInstant` describes it: a bracketed zone
|
|
18
|
+
* in it is not validated, and an offset written to the minute that is that zone's sub-minute
|
|
19
|
+
* offset rounded (`-00:45[Africa/Monrovia]`, for −00:44:30) names the instant the zone gives.
|
|
17
20
|
*
|
|
18
|
-
* @param timeZone IANA
|
|
21
|
+
* @param timeZone IANA name or UTC offset
|
|
19
22
|
* @param instant ISO 8601 instant string (e.g. "2024-07-15T12:00:00Z")
|
|
20
23
|
* @returns offset string (e.g. "-04:00"), or "" on invalid input
|
|
21
24
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { instantFrom } from "../../internal/instantNanoseconds.js";
|
|
2
2
|
import { hasInstantShape } from "../../internal/isoStringBody.js";
|
|
3
3
|
import { instantLeapSecond } from "../../regex/index.js";
|
|
4
4
|
import { isValidTimeZone } from "../validate/index.js";
|
|
@@ -18,8 +18,11 @@ import { isValidTimeZone } from "../validate/index.js";
|
|
|
18
18
|
* - The instant is ISO 8601 extended format before any annotation (`<date>T<time>`, then `Z` or
|
|
19
19
|
* `±HH:MM[:SS[.fraction]]`): basic format, a `t` or space separator, a lower-case `z` and an
|
|
20
20
|
* hour-only offset return "".
|
|
21
|
+
* - Only the instant is read from `instant`, as `isValidInstant` describes it: a bracketed zone
|
|
22
|
+
* in it is not validated, and an offset written to the minute that is that zone's sub-minute
|
|
23
|
+
* offset rounded (`-00:45[Africa/Monrovia]`, for −00:44:30) names the instant the zone gives.
|
|
21
24
|
*
|
|
22
|
-
* @param timeZone IANA
|
|
25
|
+
* @param timeZone IANA name or UTC offset
|
|
23
26
|
* @param instant ISO 8601 instant string (e.g. "2024-07-15T12:00:00Z")
|
|
24
27
|
* @returns offset string (e.g. "-04:00"), or "" on invalid input
|
|
25
28
|
*
|
|
@@ -42,7 +45,7 @@ export function getTimeZoneOffset(timeZone, instant) {
|
|
|
42
45
|
return "";
|
|
43
46
|
}
|
|
44
47
|
try {
|
|
45
|
-
return
|
|
48
|
+
return instantFrom(instant).toZonedDateTimeISO(timeZone).offset;
|
|
46
49
|
}
|
|
47
50
|
catch {
|
|
48
51
|
return "";
|
|
@@ -4,14 +4,26 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
4
4
|
*
|
|
5
5
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
6
6
|
* - Validation is performed on the timezone.
|
|
7
|
+
* - `smallestUnit` is the only option read. Any other key on `optionsArg` is ignored, so the
|
|
8
|
+
* string always carries the offset and the bracketed time zone, and smaller units are always
|
|
9
|
+
* truncated.
|
|
7
10
|
*
|
|
8
11
|
* @param ianaTimezone IANA timeZone identifier
|
|
9
|
-
* @param optionsArg optional
|
|
12
|
+
* @param optionsArg optional setting for the precision of the output string
|
|
10
13
|
* @returns zoned ISO 8601 datetime string or "" on invalid input
|
|
11
14
|
*
|
|
12
15
|
* @example getZonedNow("America/New_York") // "2024-02-29T09:30:45.123-05:00[America/New_York]"
|
|
16
|
+
* @example getZonedNow("America/New_York", { smallestUnit: "second" }) // "2024-02-29T09:30:45-05:00[America/New_York]"
|
|
13
17
|
* @example getZonedNow("Invalid/Zone") // ""
|
|
18
|
+
* @example getZonedNow("America/New_York", { smallestUnit: "fortnight" as never }) // "" (not a unit from minute to nanosecond)
|
|
14
19
|
*/
|
|
15
20
|
export declare function getZonedNow(ianaTimezone: string, optionsArg?: {
|
|
21
|
+
/**
|
|
22
|
+
* The smallest unit written in the output string, from `"minute"` to `"nanosecond"`, singular
|
|
23
|
+
* or plural. Anything smaller is truncated, as Temporal's `toString` does with its `"trunc"`
|
|
24
|
+
* rounding mode.
|
|
25
|
+
*
|
|
26
|
+
* @defaultValue `"millisecond"`
|
|
27
|
+
*/
|
|
16
28
|
smallestUnit?: Temporal.ZonedDateTimeToStringOptions["smallestUnit"];
|
|
17
29
|
}): string;
|
|
@@ -1,27 +1,36 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isValidTimeZone } from "../validate/index.js";
|
|
3
3
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
4
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
4
5
|
/**
|
|
5
6
|
* Return the current zoned datetime for the specified IANA timeZone.
|
|
6
7
|
*
|
|
7
8
|
* - Uses Temporal.Now.zonedDateTimeISO to get the current time.
|
|
8
9
|
* - Validation is performed on the timezone.
|
|
10
|
+
* - `smallestUnit` is the only option read. Any other key on `optionsArg` is ignored, so the
|
|
11
|
+
* string always carries the offset and the bracketed time zone, and smaller units are always
|
|
12
|
+
* truncated.
|
|
9
13
|
*
|
|
10
14
|
* @param ianaTimezone IANA timeZone identifier
|
|
11
|
-
* @param optionsArg optional
|
|
15
|
+
* @param optionsArg optional setting for the precision of the output string
|
|
12
16
|
* @returns zoned ISO 8601 datetime string or "" on invalid input
|
|
13
17
|
*
|
|
14
18
|
* @example getZonedNow("America/New_York") // "2024-02-29T09:30:45.123-05:00[America/New_York]"
|
|
19
|
+
* @example getZonedNow("America/New_York", { smallestUnit: "second" }) // "2024-02-29T09:30:45-05:00[America/New_York]"
|
|
15
20
|
* @example getZonedNow("Invalid/Zone") // ""
|
|
21
|
+
* @example getZonedNow("America/New_York", { smallestUnit: "fortnight" as never }) // "" (not a unit from minute to nanosecond)
|
|
16
22
|
*/
|
|
17
23
|
export function getZonedNow(ianaTimezone, optionsArg) {
|
|
18
24
|
try {
|
|
19
25
|
if (!isOptionsArgument(optionsArg)) {
|
|
20
26
|
return "";
|
|
21
27
|
}
|
|
28
|
+
// ECMA-402 GetOption (the Temporal specification defines the same operation): the option is
|
|
29
|
+
// read once, and a value of undefined is absent, so the default applies.
|
|
30
|
+
// Only smallestUnit is read: any other key on the caller's object (roundingMode, offset,
|
|
31
|
+
// timeZoneName, calendarName, fractionalSecondDigits) never reaches Temporal's toString.
|
|
22
32
|
const options = {
|
|
23
|
-
smallestUnit: "millisecond",
|
|
24
|
-
...optionsArg,
|
|
33
|
+
smallestUnit: optionOrDefault(optionsArg?.smallestUnit, "millisecond"),
|
|
25
34
|
};
|
|
26
35
|
if (!isValidTimeZone(ianaTimezone)) {
|
|
27
36
|
return "";
|
|
@@ -39,6 +39,15 @@
|
|
|
39
39
|
* @example intervalDifferenceZoned("invalid", "2024-12-31T17:00:00+00:00[UTC]", "2024-06-01T12:00:00+00:00[UTC]", "2024-07-01T13:00:00+00:00[UTC]") // []
|
|
40
40
|
*/
|
|
41
41
|
export declare function intervalDifferenceZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
|
|
42
|
+
/**
|
|
43
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
44
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
45
|
+
*/
|
|
42
46
|
start: string;
|
|
47
|
+
/**
|
|
48
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
49
|
+
* interval holds everything from `start` up to but not including this value. It is always later
|
|
50
|
+
* than `start`.
|
|
51
|
+
*/
|
|
43
52
|
end: string;
|
|
44
53
|
}>;
|
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
* - Each boundary is `start + round((end - start) · i / n)` in integer epoch nanoseconds (real
|
|
8
8
|
* elapsed time, exact at any span length), so a spring-forward day split in half lands exactly
|
|
9
9
|
* on the DST transition's real midpoint rather than the local-clock midpoint.
|
|
10
|
+
* - When `n` is larger than the number of nanoseconds in the interval, some pieces are empty (their
|
|
11
|
+
* `start` equals their `end`): the result always has exactly `n` pieces.
|
|
10
12
|
* - `n === 1` returns the original interval unchanged, as a single-element array.
|
|
11
13
|
* - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals, each
|
|
12
14
|
* an empty `[start, start)` that holds no instant.
|
|
15
|
+
* - `start` and `end` may name different time zones. The first `start` and every inner boundary
|
|
16
|
+
* are written in `start`'s zone; the last `end` is the `end` argument, in its own zone.
|
|
13
17
|
* - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
|
|
14
18
|
* start/end, `start > end`, leap-second strings).
|
|
15
19
|
* - Accepts RFC 9557 calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) as
|
|
@@ -19,14 +23,12 @@
|
|
|
19
23
|
* unreadable as a set. A mismatch returns `[]`.
|
|
20
24
|
* - Output boundaries are re-derived in the resolved calendar via `formatZonedInCalendar`, never
|
|
21
25
|
* copied from an input string (E7's D7-zoned).
|
|
22
|
-
* - `options.maxPieces`
|
|
23
|
-
* exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
|
|
24
|
-
* before building any piece. An invalid `maxPieces` also returns `[]`.
|
|
26
|
+
* - An `n` over `options.maxPieces` returns `[]` before any piece is built.
|
|
25
27
|
*
|
|
26
28
|
* @param start ISO 8601 zoned datetime string for the interval start
|
|
27
29
|
* @param end ISO 8601 zoned datetime string for the interval end
|
|
28
30
|
* @param n number of equal sub-intervals to produce (positive integer)
|
|
29
|
-
* @param options optional
|
|
31
|
+
* @param options optional limit on the size of the output
|
|
30
32
|
* @returns array of `n` `{ start, end }` records, or `[]` on invalid input
|
|
31
33
|
*
|
|
32
34
|
* @example intervalDivideEquallyZoned("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", 2) // [{ start: "2024-03-09T12:00:00-05:00[America/New_York]", end: "2024-03-10T12:30:00-04:00[America/New_York]" }, { start: "2024-03-10T12:30:00-04:00[America/New_York]", end: "2024-03-11T12:00:00-04:00[America/New_York]" }] (47 real hours split in half)
|
|
@@ -37,8 +39,24 @@
|
|
|
37
39
|
* @example intervalDivideEquallyZoned("2024-01-01T00:00:00+00:00[UTC]", "2024-01-04T00:00:00+00:00[UTC]", 3, { maxPieces: 3 }) // [{ start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-02T00:00:00+00:00[UTC]" }, { start: "2024-01-02T00:00:00+00:00[UTC]", end: "2024-01-03T00:00:00+00:00[UTC]" }, { start: "2024-01-03T00:00:00+00:00[UTC]", end: "2024-01-04T00:00:00+00:00[UTC]" }]
|
|
38
40
|
*/
|
|
39
41
|
export declare function intervalDivideEquallyZoned(start: string, end: string, n: number, options?: {
|
|
42
|
+
/**
|
|
43
|
+
* The most records the result may hold. A result that would hold more, or more than the longest
|
|
44
|
+
* possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
|
|
45
|
+
* positive safe integer also returns `[]`.
|
|
46
|
+
*
|
|
47
|
+
* @defaultValue `1_000_000`
|
|
48
|
+
*/
|
|
40
49
|
maxPieces?: number;
|
|
41
50
|
}): Array<{
|
|
51
|
+
/**
|
|
52
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
53
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
54
|
+
*/
|
|
42
55
|
start: string;
|
|
56
|
+
/**
|
|
57
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
58
|
+
* interval holds everything from `start` up to but not including this value. It can equal
|
|
59
|
+
* `start`, which makes the interval empty.
|
|
60
|
+
*/
|
|
43
61
|
end: string;
|
|
44
62
|
}>;
|
|
@@ -13,9 +13,13 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
|
|
|
13
13
|
* - Each boundary is `start + round((end - start) · i / n)` in integer epoch nanoseconds (real
|
|
14
14
|
* elapsed time, exact at any span length), so a spring-forward day split in half lands exactly
|
|
15
15
|
* on the DST transition's real midpoint rather than the local-clock midpoint.
|
|
16
|
+
* - When `n` is larger than the number of nanoseconds in the interval, some pieces are empty (their
|
|
17
|
+
* `start` equals their `end`): the result always has exactly `n` pieces.
|
|
16
18
|
* - `n === 1` returns the original interval unchanged, as a single-element array.
|
|
17
19
|
* - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals, each
|
|
18
20
|
* an empty `[start, start)` that holds no instant.
|
|
21
|
+
* - `start` and `end` may name different time zones. The first `start` and every inner boundary
|
|
22
|
+
* are written in `start`'s zone; the last `end` is the `end` argument, in its own zone.
|
|
19
23
|
* - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
|
|
20
24
|
* start/end, `start > end`, leap-second strings).
|
|
21
25
|
* - Accepts RFC 9557 calendar-annotated zoned strings (as produced by `convertZonedToCalendar`) as
|
|
@@ -25,14 +29,12 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
|
|
|
25
29
|
* unreadable as a set. A mismatch returns `[]`.
|
|
26
30
|
* - Output boundaries are re-derived in the resolved calendar via `formatZonedInCalendar`, never
|
|
27
31
|
* copied from an input string (E7's D7-zoned).
|
|
28
|
-
* - `options.maxPieces`
|
|
29
|
-
* exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
|
|
30
|
-
* before building any piece. An invalid `maxPieces` also returns `[]`.
|
|
32
|
+
* - An `n` over `options.maxPieces` returns `[]` before any piece is built.
|
|
31
33
|
*
|
|
32
34
|
* @param start ISO 8601 zoned datetime string for the interval start
|
|
33
35
|
* @param end ISO 8601 zoned datetime string for the interval end
|
|
34
36
|
* @param n number of equal sub-intervals to produce (positive integer)
|
|
35
|
-
* @param options optional
|
|
37
|
+
* @param options optional limit on the size of the output
|
|
36
38
|
* @returns array of `n` `{ start, end }` records, or `[]` on invalid input
|
|
37
39
|
*
|
|
38
40
|
* @example intervalDivideEquallyZoned("2024-03-09T12:00:00-05:00[America/New_York]", "2024-03-11T12:00:00-04:00[America/New_York]", 2) // [{ start: "2024-03-09T12:00:00-05:00[America/New_York]", end: "2024-03-10T12:30:00-04:00[America/New_York]" }, { start: "2024-03-10T12:30:00-04:00[America/New_York]", end: "2024-03-11T12:00:00-04:00[America/New_York]" }] (47 real hours split in half)
|
|
@@ -8,13 +8,9 @@ import type { Disambiguation, Overflow } from "../../types/index.js";
|
|
|
8
8
|
* resolve against `value` itself — no separate `relativeTo` is needed.
|
|
9
9
|
* - Follows Temporal's AddZonedDateTime: the date portion of the duration (years, months, weeks,
|
|
10
10
|
* days) moves the wall-clock date, then the time portion (hours and smaller) is added (subtracted
|
|
11
|
-
* for `anchor: "end"`) in exact time. `disambiguation`
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* (DST-end) overlap "compatible" and "earlier" take the earlier instant and "later" the later
|
|
15
|
-
* one; in a spring-forward (DST-start) gap "compatible" and "later" move the wall clock forward by
|
|
16
|
-
* the gap length and "earlier" back by it; "reject" returns null for both. It never re-resolves
|
|
17
|
-
* the exact-time result, so a time-only duration ignores it.
|
|
11
|
+
* for `anchor: "end"`) in exact time. `disambiguation` applies ONLY to the intermediate
|
|
12
|
+
* wall-clock date-time after the date portion, exactly as Temporal's GetEpochNanosecondsFor
|
|
13
|
+
* resolves it. It never re-resolves the exact-time result.
|
|
18
14
|
* - Compatibility: before 1.16.0 a date portion landing in a spring-forward gap was always moved
|
|
19
15
|
* forward, whatever `disambiguation` said. Pass "compatible" (or omit it) to keep that result.
|
|
20
16
|
* - Compatibility: before 1.16.0 a non-"compatible" `disambiguation` re-resolved the final wall
|
|
@@ -25,8 +21,6 @@ import type { Disambiguation, Overflow } from "../../types/index.js";
|
|
|
25
21
|
* from a plain date-time, which has no UTC offset for it to act on.
|
|
26
22
|
* - A negative `duration` (e.g. `"-P1D"`) can invert the computed span; returns null when that
|
|
27
23
|
* happens, mirroring `intervalIntersectionZoned`'s `start > end` rejection.
|
|
28
|
-
* - `overflow` ("constrain" (default) | "reject") controls out-of-range results, e.g. adding 1 month
|
|
29
|
-
* to Jan 31: "constrain" clamps to Feb 29/28, "reject" returns null.
|
|
30
24
|
* - Accepts a RFC 9557 calendar-annotated zoned string (as produced by `convertZonedToCalendar`) as
|
|
31
25
|
* well as a bare ISO one — E7 (issue #152). Calendar units in `duration` resolve against that
|
|
32
26
|
* calendar, and both returned endpoints are re-derived in it via `formatZonedInCalendar`. There
|
|
@@ -37,7 +31,7 @@ import type { Disambiguation, Overflow } from "../../types/index.js";
|
|
|
37
31
|
* @param value ISO 8601 zoned datetime string, optionally calendar-annotated
|
|
38
32
|
* @param duration ISO 8601 duration string
|
|
39
33
|
* @param anchor "start" | "end" — which endpoint `value` represents
|
|
40
|
-
* @param options optional
|
|
34
|
+
* @param options optional settings for resolving a DST gap or overlap and an out-of-range date
|
|
41
35
|
* @returns `{ start, end }` with the constructed span, or null on invalid input
|
|
42
36
|
*
|
|
43
37
|
* @example intervalFromDurationZoned("2024-01-01T00:00:00+00:00[UTC]", "P1D", "start") // { start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-02T00:00:00+00:00[UTC]" }
|
|
@@ -51,9 +45,34 @@ import type { Disambiguation, Overflow } from "../../types/index.js";
|
|
|
51
45
|
* @example intervalFromDurationZoned("invalid", "P1D", "start") // null
|
|
52
46
|
*/
|
|
53
47
|
export declare function intervalFromDurationZoned(value: string, duration: string, anchor: "start" | "end", options?: {
|
|
48
|
+
/**
|
|
49
|
+
* How the intermediate wall-clock date-time, reached after the date portion of the duration is
|
|
50
|
+
* applied, resolves when it falls in a DST gap or overlap. In a fall-back overlap
|
|
51
|
+
* `"compatible"` and `"earlier"` take the earlier instant and `"later"` the later one; in a
|
|
52
|
+
* spring-forward gap `"compatible"` and `"later"` move the wall clock forward by the gap length
|
|
53
|
+
* and `"earlier"` back by it. `"reject"` returns `null` for both, and a time-only duration
|
|
54
|
+
* ignores the option.
|
|
55
|
+
*
|
|
56
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
57
|
+
*/
|
|
54
58
|
disambiguation?: Disambiguation;
|
|
59
|
+
/**
|
|
60
|
+
* What happens when the result names a day its month does not have, such as adding 1 month to
|
|
61
|
+
* 31 January. `"constrain"` clamps to the last valid day; `"reject"` returns `null`.
|
|
62
|
+
*
|
|
63
|
+
* @defaultValue `"constrain"`, Temporal's default.
|
|
64
|
+
*/
|
|
55
65
|
overflow?: Overflow;
|
|
56
66
|
}): {
|
|
67
|
+
/**
|
|
68
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
69
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
70
|
+
*/
|
|
57
71
|
start: string;
|
|
72
|
+
/**
|
|
73
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
74
|
+
* interval holds everything from `start` up to but not including this value. It can equal
|
|
75
|
+
* `start`, which makes the interval empty.
|
|
76
|
+
*/
|
|
58
77
|
end: string;
|
|
59
78
|
} | null;
|
|
@@ -3,6 +3,7 @@ import { isValidDuration } from "../../duration/validate/index.js";
|
|
|
3
3
|
import { addToZonedDisambiguated, calendarSystemOfZonedValue, formatZonedInCalendar, parseCalendarZonedValue, resolveOverflow, } from "../../internal/index.js";
|
|
4
4
|
import { isValidCalendarZonedDateTime } from "../validate/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
6
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
6
7
|
/**
|
|
7
8
|
* Construct a zoned interval from a single point plus an ISO 8601 duration, anchored at either end.
|
|
8
9
|
*
|
|
@@ -12,13 +13,9 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
12
13
|
* resolve against `value` itself — no separate `relativeTo` is needed.
|
|
13
14
|
* - Follows Temporal's AddZonedDateTime: the date portion of the duration (years, months, weeks,
|
|
14
15
|
* days) moves the wall-clock date, then the time portion (hours and smaller) is added (subtracted
|
|
15
|
-
* for `anchor: "end"`) in exact time. `disambiguation`
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* (DST-end) overlap "compatible" and "earlier" take the earlier instant and "later" the later
|
|
19
|
-
* one; in a spring-forward (DST-start) gap "compatible" and "later" move the wall clock forward by
|
|
20
|
-
* the gap length and "earlier" back by it; "reject" returns null for both. It never re-resolves
|
|
21
|
-
* the exact-time result, so a time-only duration ignores it.
|
|
16
|
+
* for `anchor: "end"`) in exact time. `disambiguation` applies ONLY to the intermediate
|
|
17
|
+
* wall-clock date-time after the date portion, exactly as Temporal's GetEpochNanosecondsFor
|
|
18
|
+
* resolves it. It never re-resolves the exact-time result.
|
|
22
19
|
* - Compatibility: before 1.16.0 a date portion landing in a spring-forward gap was always moved
|
|
23
20
|
* forward, whatever `disambiguation` said. Pass "compatible" (or omit it) to keep that result.
|
|
24
21
|
* - Compatibility: before 1.16.0 a non-"compatible" `disambiguation` re-resolved the final wall
|
|
@@ -29,8 +26,6 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
29
26
|
* from a plain date-time, which has no UTC offset for it to act on.
|
|
30
27
|
* - A negative `duration` (e.g. `"-P1D"`) can invert the computed span; returns null when that
|
|
31
28
|
* happens, mirroring `intervalIntersectionZoned`'s `start > end` rejection.
|
|
32
|
-
* - `overflow` ("constrain" (default) | "reject") controls out-of-range results, e.g. adding 1 month
|
|
33
|
-
* to Jan 31: "constrain" clamps to Feb 29/28, "reject" returns null.
|
|
34
29
|
* - Accepts a RFC 9557 calendar-annotated zoned string (as produced by `convertZonedToCalendar`) as
|
|
35
30
|
* well as a bare ISO one — E7 (issue #152). Calendar units in `duration` resolve against that
|
|
36
31
|
* calendar, and both returned endpoints are re-derived in it via `formatZonedInCalendar`. There
|
|
@@ -41,7 +36,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
41
36
|
* @param value ISO 8601 zoned datetime string, optionally calendar-annotated
|
|
42
37
|
* @param duration ISO 8601 duration string
|
|
43
38
|
* @param anchor "start" | "end" — which endpoint `value` represents
|
|
44
|
-
* @param options optional
|
|
39
|
+
* @param options optional settings for resolving a DST gap or overlap and an out-of-range date
|
|
45
40
|
* @returns `{ start, end }` with the constructed span, or null on invalid input
|
|
46
41
|
*
|
|
47
42
|
* @example intervalFromDurationZoned("2024-01-01T00:00:00+00:00[UTC]", "P1D", "start") // { start: "2024-01-01T00:00:00+00:00[UTC]", end: "2024-01-02T00:00:00+00:00[UTC]" }
|
|
@@ -68,9 +63,7 @@ export function intervalFromDurationZoned(value, duration, anchor, options) {
|
|
|
68
63
|
if (anchor !== "start" && anchor !== "end") {
|
|
69
64
|
return null;
|
|
70
65
|
}
|
|
71
|
-
const disambiguation = options?.disambiguation
|
|
72
|
-
? "compatible"
|
|
73
|
-
: options.disambiguation;
|
|
66
|
+
const disambiguation = optionOrDefault(options?.disambiguation, "compatible");
|
|
74
67
|
const overflow = resolveOverflow(options?.overflow);
|
|
75
68
|
try {
|
|
76
69
|
const calendar = calendarSystemOfZonedValue(value);
|
|
@@ -37,6 +37,15 @@
|
|
|
37
37
|
* @example intervalIntersectionZoned("invalid", "2024-06-30T23:59:59+00:00[UTC]", "2024-04-01T00:00:00+00:00[UTC]", "2024-12-31T23:59:59+00:00[UTC]") // null
|
|
38
38
|
*/
|
|
39
39
|
export declare function intervalIntersectionZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): {
|
|
40
|
+
/**
|
|
41
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
42
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
43
|
+
*/
|
|
40
44
|
start: string;
|
|
45
|
+
/**
|
|
46
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
47
|
+
* interval holds everything from `start` up to but not including this value. It can equal
|
|
48
|
+
* `start`, which makes the interval empty.
|
|
49
|
+
*/
|
|
41
50
|
end: string;
|
|
42
51
|
} | null;
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* each record's `end` is the next record's `start` and belongs only to that next record, so the
|
|
14
14
|
* pieces share no instant and together cover `[start, end)` exactly once.
|
|
15
15
|
* - Returns `[{ start, end }]` (the whole interval, unsplit) when no valid in-range point remains.
|
|
16
|
+
* - A piece's `end` equals its `start` only when the interval itself is zero-length (`start`
|
|
17
|
+
* equal to `end`): the result is then that one empty piece, whatever the points.
|
|
16
18
|
* - Returns `[]` when `points` is not an array, when any element is not a valid ISO
|
|
17
19
|
* ZonedDateTime string, or on invalid input (unparseable start/end, `start > end`,
|
|
18
20
|
* leap-second strings).
|
|
@@ -34,6 +36,15 @@
|
|
|
34
36
|
* @example intervalSplitAtZoned("invalid", "2024-01-10T00:00:00+00:00[UTC]", ["2024-01-05T00:00:00+00:00[UTC]"]) // []
|
|
35
37
|
*/
|
|
36
38
|
export declare function intervalSplitAtZoned(start: string, end: string, points: string[]): Array<{
|
|
39
|
+
/**
|
|
40
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
41
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
42
|
+
*/
|
|
37
43
|
start: string;
|
|
44
|
+
/**
|
|
45
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
46
|
+
* interval holds everything from `start` up to but not including this value. It can equal
|
|
47
|
+
* `start`, which makes the interval empty.
|
|
48
|
+
*/
|
|
38
49
|
end: string;
|
|
39
50
|
}>;
|
|
@@ -17,6 +17,8 @@ import { isValidCalendarZonedInterval } from "./validate/index.js";
|
|
|
17
17
|
* each record's `end` is the next record's `start` and belongs only to that next record, so the
|
|
18
18
|
* pieces share no instant and together cover `[start, end)` exactly once.
|
|
19
19
|
* - Returns `[{ start, end }]` (the whole interval, unsplit) when no valid in-range point remains.
|
|
20
|
+
* - A piece's `end` equals its `start` only when the interval itself is zero-length (`start`
|
|
21
|
+
* equal to `end`): the result is then that one empty piece, whatever the points.
|
|
20
22
|
* - Returns `[]` when `points` is not an array, when any element is not a valid ISO
|
|
21
23
|
* ZonedDateTime string, or on invalid input (unparseable start/end, `start > end`,
|
|
22
24
|
* leap-second strings).
|
|
@@ -39,6 +39,15 @@
|
|
|
39
39
|
* @example intervalUnionZoned("invalid", "2024-06-30T23:59:59+00:00[UTC]", "2024-04-01T00:00:00+00:00[UTC]", "2024-12-31T23:59:59+00:00[UTC]") // null
|
|
40
40
|
*/
|
|
41
41
|
export declare function intervalUnionZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): {
|
|
42
|
+
/**
|
|
43
|
+
* The instant the interval begins at, as a zoned ISO 8601 string with offset and bracketed time
|
|
44
|
+
* zone. It keeps a calendar annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
45
|
+
*/
|
|
42
46
|
start: string;
|
|
47
|
+
/**
|
|
48
|
+
* The first instant after the interval, in the same format as `start`. It is exclusive: the
|
|
49
|
+
* interval holds everything from `start` up to but not including this value. It is always later
|
|
50
|
+
* than `start`.
|
|
51
|
+
*/
|
|
43
52
|
end: string;
|
|
44
53
|
} | null;
|