@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
|
@@ -11,16 +11,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
11
11
|
* durationAs("P1DT2H30M", "hours") is 26.5, not the 2 that `getDurationUnit` reads.
|
|
12
12
|
* - The result is fractional, not rounded: durationAs("P1DT2H30M", "days") is
|
|
13
13
|
* 1.1041666666666667. Round it yourself, or reach for `normalizeDuration` instead.
|
|
14
|
-
* - `relativeTo` is
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* documented gap `normalizeDuration` (A3) carries; `addDuration`/`subtractDuration` (A2)
|
|
18
|
-
* have it worse still, since Temporal gives them no `relativeTo` option at all.
|
|
14
|
+
* - The calendar-unit rule of `relativeTo` is the same one `normalizeDuration` (A3) carries;
|
|
15
|
+
* `addDuration`/`subtractDuration` (A2) have it worse still, since Temporal gives them no
|
|
16
|
+
* `relativeTo` option at all.
|
|
19
17
|
* - The requested-unit half of that rule bites even on day/time-only input: "P1DT2H30M" has
|
|
20
18
|
* no calendar component, yet durationAs("P1DT2H30M", "weeks") is still null — a week is a
|
|
21
19
|
* calendar quantity to Temporal regardless of what it is being measured from.
|
|
22
|
-
* - `relativeTo` changes the answer for non-calendar units too when it names a zoned instant:
|
|
23
|
-
* a day spanning a DST spring-forward transition totals 23 hours, not 24.
|
|
24
20
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
25
21
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
26
22
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -43,7 +39,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
43
39
|
*
|
|
44
40
|
* @param value ISO 8601 duration string
|
|
45
41
|
* @param unit DateTimeDurationUnit to total into ("years" | "months" | "weeks" | "days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds", or the singular name)
|
|
46
|
-
* @param options
|
|
42
|
+
* @param options The anchor calendar units are measured from
|
|
47
43
|
* @returns the fractional total in `unit`, or null on invalid input
|
|
48
44
|
*
|
|
49
45
|
* @example durationAs("P1DT2H30M", "hours") // 26.5
|
|
@@ -5,16 +5,13 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
5
5
|
* - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
|
|
6
6
|
* - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
|
|
7
7
|
* "PT24H" absent a `relativeTo`.
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
* compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
8
|
+
* - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
|
|
9
|
+
* Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
11
10
|
* (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
|
|
12
11
|
* so calendar-unit durations are comparable here even though they cannot be combined there.
|
|
13
12
|
* `durationAs` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
|
|
14
13
|
* - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
|
|
15
14
|
* than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
|
|
16
|
-
* - It matters for non-calendar units too when it names a zoned instant — across a DST
|
|
17
|
-
* spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
|
|
18
15
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
19
16
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
20
17
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -37,7 +34,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
37
34
|
*
|
|
38
35
|
* @param a ISO 8601 duration string
|
|
39
36
|
* @param b ISO 8601 duration string
|
|
40
|
-
* @param options
|
|
37
|
+
* @param options The anchor calendar units are measured from
|
|
41
38
|
* @returns -1, 0, or 1, or null on invalid input
|
|
42
39
|
*
|
|
43
40
|
* @example compareDurations("PT1H", "PT30M") // 1
|
|
@@ -56,5 +53,14 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
56
53
|
* @example compareDurations("P1M", "P30D", { relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // 0 (a date-time without a zone reads as its date, as Temporal reads relativeTo)
|
|
57
54
|
*/
|
|
58
55
|
export declare function compareDurations(a: string, b: string, options?: {
|
|
56
|
+
/**
|
|
57
|
+
* The date or zoned date-time both durations are measured from. It is required when either
|
|
58
|
+
* side has a year, month or week and the two differ. With a zoned value, days follow that
|
|
59
|
+
* zone's clock changes, so across a spring-forward transition `"P1D"` is 23 hours and
|
|
60
|
+
* compares shorter than `"PT24H"`.
|
|
61
|
+
*
|
|
62
|
+
* @defaultValue None. Days are 24 hours, and two different durations of which one has a
|
|
63
|
+
* year, month or week return `null`.
|
|
64
|
+
*/
|
|
59
65
|
relativeTo?: DurationRelativeTo;
|
|
60
66
|
}): number | null;
|
|
@@ -7,16 +7,13 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
7
7
|
* - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
|
|
8
8
|
* - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
|
|
9
9
|
* "PT24H" absent a `relativeTo`.
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
* compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
10
|
+
* - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
|
|
11
|
+
* Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
|
|
13
12
|
* (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
|
|
14
13
|
* so calendar-unit durations are comparable here even though they cannot be combined there.
|
|
15
14
|
* `durationAs` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
|
|
16
15
|
* - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
|
|
17
16
|
* than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
|
|
18
|
-
* - It matters for non-calendar units too when it names a zoned instant — across a DST
|
|
19
|
-
* spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
|
|
20
17
|
* - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
|
|
21
18
|
* offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
|
|
22
19
|
* nonexistent one the later instant, and an offset that does not match the zone returns null.
|
|
@@ -39,7 +36,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
39
36
|
*
|
|
40
37
|
* @param a ISO 8601 duration string
|
|
41
38
|
* @param b ISO 8601 duration string
|
|
42
|
-
* @param options
|
|
39
|
+
* @param options The anchor calendar units are measured from
|
|
43
40
|
* @returns -1, 0, or 1, or null on invalid input
|
|
44
41
|
*
|
|
45
42
|
* @example compareDurations("PT1H", "PT30M") // 1
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
+
/** How `formatDuration` writes unit names, and whether it writes zero components. */
|
|
1
2
|
export interface FormatDurationOptions {
|
|
3
|
+
/**
|
|
4
|
+
* The length of each unit name, as the `unitDisplay` of `Intl.NumberFormat`: `"long"` ("90
|
|
5
|
+
* minutes"), `"short"` ("90 min") or `"narrow"` ("90m"). The components are joined as a long list
|
|
6
|
+
* ("1 day, 2 hours, and 30 minutes") for `"long"` and as a short list otherwise.
|
|
7
|
+
*
|
|
8
|
+
* @defaultValue `"long"`
|
|
9
|
+
*/
|
|
2
10
|
style?: "long" | "short" | "narrow";
|
|
11
|
+
/**
|
|
12
|
+
* Whether components that are zero are written. `false` leaves them out, so `"P1DT0H30M"`
|
|
13
|
+
* reads "1 day and 30 minutes"; `true` writes every unit from years to seconds.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue `false`
|
|
16
|
+
*/
|
|
3
17
|
zero?: boolean;
|
|
4
18
|
}
|
|
5
19
|
/**
|
|
@@ -16,10 +30,8 @@ export interface FormatDurationOptions {
|
|
|
16
30
|
* - To render fewer fraction digits, round the string first with parseDuration, e.g.
|
|
17
31
|
* { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
|
|
18
32
|
* function produced before (parseDuration's default roundingMode "trunc" drops the digits).
|
|
19
|
-
* - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
|
|
20
|
-
* minutes"). Pass { zero: true } to include them.
|
|
21
33
|
* - A zero-length duration (e.g. "PT0S") always renders its seconds component
|
|
22
|
-
* ("0 seconds") even
|
|
34
|
+
* ("0 seconds") even when zero components are left out, since omitting
|
|
23
35
|
* every component would otherwise produce "".
|
|
24
36
|
* - Negative durations render each component with a leading "-" (Temporal stores
|
|
25
37
|
* every field of a negative duration as a negative number).
|
|
@@ -27,7 +39,7 @@ export interface FormatDurationOptions {
|
|
|
27
39
|
*
|
|
28
40
|
* @param value ISO 8601 duration string
|
|
29
41
|
* @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
|
|
30
|
-
* @param options
|
|
42
|
+
* @param options How unit names are written, and whether zero components are shown
|
|
31
43
|
* @returns human-readable rendering of the duration, or "" on invalid input
|
|
32
44
|
*
|
|
33
45
|
* @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
3
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
3
4
|
const UNIT_TO_INTL = {
|
|
4
5
|
years: "year",
|
|
5
6
|
months: "month",
|
|
@@ -58,10 +59,8 @@ function exactSeconds(duration) {
|
|
|
58
59
|
* - To render fewer fraction digits, round the string first with parseDuration, e.g.
|
|
59
60
|
* { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
|
|
60
61
|
* function produced before (parseDuration's default roundingMode "trunc" drops the digits).
|
|
61
|
-
* - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
|
|
62
|
-
* minutes"). Pass { zero: true } to include them.
|
|
63
62
|
* - A zero-length duration (e.g. "PT0S") always renders its seconds component
|
|
64
|
-
* ("0 seconds") even
|
|
63
|
+
* ("0 seconds") even when zero components are left out, since omitting
|
|
65
64
|
* every component would otherwise produce "".
|
|
66
65
|
* - Negative durations render each component with a leading "-" (Temporal stores
|
|
67
66
|
* every field of a negative duration as a negative number).
|
|
@@ -69,7 +68,7 @@ function exactSeconds(duration) {
|
|
|
69
68
|
*
|
|
70
69
|
* @param value ISO 8601 duration string
|
|
71
70
|
* @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
|
|
72
|
-
* @param options
|
|
71
|
+
* @param options How unit names are written, and whether zero components are shown
|
|
73
72
|
* @returns human-readable rendering of the duration, or "" on invalid input
|
|
74
73
|
*
|
|
75
74
|
* @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
|
|
@@ -94,7 +93,7 @@ export function formatDuration(value, locale, options = {}) {
|
|
|
94
93
|
}
|
|
95
94
|
try {
|
|
96
95
|
const duration = Temporal.Duration.from(value);
|
|
97
|
-
const style = options.style
|
|
96
|
+
const style = optionOrDefault(options.style, "long");
|
|
98
97
|
const includeZero = options.zero ?? false;
|
|
99
98
|
const amounts = {
|
|
100
99
|
years: duration.years,
|
|
@@ -4,19 +4,9 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
4
4
|
* Roll an ISO 8601 duration string's small units into larger ones.
|
|
5
5
|
*
|
|
6
6
|
* - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
|
|
7
|
-
* -
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* becomes "PT2H30M". Pass an explicit largestUnit to promote further.
|
|
11
|
-
* - relativeTo is required whenever a calendar unit (year/month/week) is involved,
|
|
12
|
-
* either as the requested largestUnit or because the input duration already has a
|
|
13
|
-
* nonzero year/month/week component (this applies even under the "auto" default).
|
|
14
|
-
* Without relativeTo in either case, returns "".
|
|
15
|
-
* - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
|
|
16
|
-
* and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
|
|
17
|
-
* For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
|
|
18
|
-
* largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
|
|
19
|
-
* increment returns "".
|
|
7
|
+
* - With no options, units are promoted only up to a unit already present: "PT90M" stays
|
|
8
|
+
* "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
|
|
9
|
+
* largestUnit to promote further.
|
|
20
10
|
* - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
|
|
21
11
|
* "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
|
|
22
12
|
* one the later instant, and an offset that does not match the zone returns "". Pass an
|
|
@@ -38,7 +28,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
38
28
|
* invalid relativeTo.
|
|
39
29
|
*
|
|
40
30
|
* @param value ISO 8601 duration string
|
|
41
|
-
* @param options
|
|
31
|
+
* @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
|
|
42
32
|
* @returns rebalanced ISO 8601 duration string, or "" on invalid input
|
|
43
33
|
*
|
|
44
34
|
* @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
|
|
@@ -55,9 +45,44 @@ import type { DurationRelativeTo } from "../../types/index.js";
|
|
|
55
45
|
* @example normalizeDuration("P45D", { largestUnit: "month", relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // "P1M15D" (a date-time without a zone reads as its date, as Temporal reads relativeTo)
|
|
56
46
|
*/
|
|
57
47
|
export declare function normalizeDuration(value: string, options?: {
|
|
48
|
+
/**
|
|
49
|
+
* The largest unit the result may carry; smaller units are rolled up into it. `"auto"` is
|
|
50
|
+
* the larger of `smallestUnit` and the duration's own largest nonzero unit, so nothing is
|
|
51
|
+
* promoted past a unit already present.
|
|
52
|
+
*
|
|
53
|
+
* @defaultValue `"auto"`
|
|
54
|
+
*/
|
|
58
55
|
largestUnit?: Temporal.LargestUnit<Temporal.DateTimeUnit>;
|
|
56
|
+
/**
|
|
57
|
+
* The smallest unit the result may carry; anything smaller is rounded into it.
|
|
58
|
+
*
|
|
59
|
+
* @defaultValue `"nanosecond"`, Temporal's default.
|
|
60
|
+
*/
|
|
59
61
|
smallestUnit?: Temporal.SmallestUnit<Temporal.DateTimeUnit>;
|
|
62
|
+
/**
|
|
63
|
+
* The step `smallestUnit` is rounded to. It must evenly divide, and be less than, 24 for
|
|
64
|
+
* hour, 60 for minute and second, and 1000 for the sub-second units. For year, month, week
|
|
65
|
+
* and day it has no maximum, but an increment above 1 is rejected unless `largestUnit` is
|
|
66
|
+
* that same unit; an invalid increment returns `""`.
|
|
67
|
+
*
|
|
68
|
+
* @defaultValue `1`, Temporal's default.
|
|
69
|
+
*/
|
|
60
70
|
roundingIncrement?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Which way a value between two steps goes when `smallestUnit` or `roundingIncrement` rounds
|
|
73
|
+
* the duration. `"halfExpand"` rounds to the nearest step, a half going away from zero, and
|
|
74
|
+
* `"trunc"` rounds toward zero.
|
|
75
|
+
*
|
|
76
|
+
* @defaultValue `"halfExpand"`, Temporal's default.
|
|
77
|
+
*/
|
|
61
78
|
roundingMode?: Temporal.RoundingMode;
|
|
79
|
+
/**
|
|
80
|
+
* The date or zoned date-time the duration is measured from. It is required whenever a year,
|
|
81
|
+
* month or week is involved, as `largestUnit` or `smallestUnit` or as a nonzero field of the
|
|
82
|
+
* duration, even under the `"auto"` default.
|
|
83
|
+
*
|
|
84
|
+
* @defaultValue None. Days are 24 hours, and a duration or unit that involves a year, month
|
|
85
|
+
* or week returns `""`.
|
|
86
|
+
*/
|
|
62
87
|
relativeTo?: DurationRelativeTo;
|
|
63
88
|
}): string;
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { durationRound, resolveDurationRelativeTo } from "../../internal/index.js";
|
|
3
3
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
4
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
4
5
|
/**
|
|
5
6
|
* Roll an ISO 8601 duration string's small units into larger ones.
|
|
6
7
|
*
|
|
7
8
|
* - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* becomes "PT2H30M". Pass an explicit largestUnit to promote further.
|
|
12
|
-
* - relativeTo is required whenever a calendar unit (year/month/week) is involved,
|
|
13
|
-
* either as the requested largestUnit or because the input duration already has a
|
|
14
|
-
* nonzero year/month/week component (this applies even under the "auto" default).
|
|
15
|
-
* Without relativeTo in either case, returns "".
|
|
16
|
-
* - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
|
|
17
|
-
* and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
|
|
18
|
-
* For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
|
|
19
|
-
* largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
|
|
20
|
-
* increment returns "".
|
|
9
|
+
* - With no options, units are promoted only up to a unit already present: "PT90M" stays
|
|
10
|
+
* "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
|
|
11
|
+
* largestUnit to promote further.
|
|
21
12
|
* - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
|
|
22
13
|
* "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
|
|
23
14
|
* one the later instant, and an offset that does not match the zone returns "". Pass an
|
|
@@ -39,7 +30,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
39
30
|
* invalid relativeTo.
|
|
40
31
|
*
|
|
41
32
|
* @param value ISO 8601 duration string
|
|
42
|
-
* @param options
|
|
33
|
+
* @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
|
|
43
34
|
* @returns rebalanced ISO 8601 duration string, or "" on invalid input
|
|
44
35
|
*
|
|
45
36
|
* @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
|
|
@@ -65,7 +56,7 @@ export function normalizeDuration(value, options) {
|
|
|
65
56
|
try {
|
|
66
57
|
const duration = Temporal.Duration.from(value);
|
|
67
58
|
return durationRound(duration, {
|
|
68
|
-
largestUnit: options?.largestUnit
|
|
59
|
+
largestUnit: optionOrDefault(options?.largestUnit, "auto"),
|
|
69
60
|
smallestUnit: options?.smallestUnit,
|
|
70
61
|
roundingIncrement: options?.roundingIncrement,
|
|
71
62
|
roundingMode: options?.roundingMode,
|
|
@@ -3,12 +3,10 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
3
3
|
* Parse and re-normalize an ISO 8601 duration string.
|
|
4
4
|
*
|
|
5
5
|
* - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
|
|
6
|
-
* - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
|
|
7
|
-
* of the re-emitted string, per Temporal's ToStringPrecisionOptions.
|
|
8
6
|
* - Returns "" for invalid input.
|
|
9
7
|
*
|
|
10
8
|
* @param value ISO 8601 duration string
|
|
11
|
-
* @param options
|
|
9
|
+
* @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
|
|
12
10
|
* @returns re-normalized ISO 8601 duration string, or "" on invalid input
|
|
13
11
|
*
|
|
14
12
|
* @example parseDuration("P1DT2H30M") // "P1DT2H30M"
|
|
@@ -18,7 +16,27 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
18
16
|
* @example parseDuration("invalid") // ""
|
|
19
17
|
*/
|
|
20
18
|
export declare function parseDuration(value: string, options?: {
|
|
19
|
+
/**
|
|
20
|
+
* The smallest unit written in the string: `"second"`, `"millisecond"`, `"microsecond"` or
|
|
21
|
+
* `"nanosecond"`. It sets how many fractional-second digits appear and takes precedence over
|
|
22
|
+
* `fractionalSecondDigits`. `"minute"` returns `""`, as `Temporal.Duration` refuses it.
|
|
23
|
+
*
|
|
24
|
+
* @defaultValue None. The precision comes from `fractionalSecondDigits`.
|
|
25
|
+
*/
|
|
21
26
|
smallestUnit?: Temporal.ToStringPrecisionOptions["smallestUnit"];
|
|
27
|
+
/**
|
|
28
|
+
* The number of fractional-second digits written: `0` to `9` writes exactly that many, and
|
|
29
|
+
* `"auto"` writes as many as the duration needs, with no trailing zeros. It has no effect when
|
|
30
|
+
* `smallestUnit` is given.
|
|
31
|
+
*
|
|
32
|
+
* @defaultValue `"auto"`, Temporal's default.
|
|
33
|
+
*/
|
|
22
34
|
fractionalSecondDigits?: Temporal.ToStringPrecisionOptions["fractionalSecondDigits"];
|
|
35
|
+
/**
|
|
36
|
+
* How the duration is rounded when the precision asked for drops digits. `"trunc"` cuts them
|
|
37
|
+
* off; `"halfExpand"` rounds to the nearest value, a half going away from zero.
|
|
38
|
+
*
|
|
39
|
+
* @defaultValue `"trunc"`, Temporal's default.
|
|
40
|
+
*/
|
|
23
41
|
roundingMode?: Temporal.ToStringPrecisionOptions["roundingMode"];
|
|
24
42
|
}): string;
|
|
@@ -4,12 +4,10 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
4
4
|
* Parse and re-normalize an ISO 8601 duration string.
|
|
5
5
|
*
|
|
6
6
|
* - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
|
|
7
|
-
* - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
|
|
8
|
-
* of the re-emitted string, per Temporal's ToStringPrecisionOptions.
|
|
9
7
|
* - Returns "" for invalid input.
|
|
10
8
|
*
|
|
11
9
|
* @param value ISO 8601 duration string
|
|
12
|
-
* @param options
|
|
10
|
+
* @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
|
|
13
11
|
* @returns re-normalized ISO 8601 duration string, or "" on invalid input
|
|
14
12
|
*
|
|
15
13
|
* @example parseDuration("P1DT2H30M") // "P1DT2H30M"
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,13 @@ export * from "@js-temporal/polyfill";
|
|
|
2
2
|
export * from "./calendar/index.js";
|
|
3
3
|
export * from "./duration/index.js";
|
|
4
4
|
export * from "./instant/index.js";
|
|
5
|
+
export * from "./intermodal/index.js";
|
|
5
6
|
export * from "./interval/index.js";
|
|
6
7
|
export * from "./plain/index.js";
|
|
7
8
|
export * from "./precision/index.js";
|
|
8
9
|
export * from "./regex/index.js";
|
|
9
10
|
export * from "./span/index.js";
|
|
11
|
+
export * from "./transport/index.js";
|
|
10
12
|
export * from "./types/index.js";
|
|
11
13
|
export * from "./unix/index.js";
|
|
12
14
|
export * from "./utc/index.js";
|
package/dist/index.js
CHANGED
|
@@ -2,11 +2,13 @@ export * from "@js-temporal/polyfill";
|
|
|
2
2
|
export * from "./calendar/index.js";
|
|
3
3
|
export * from "./duration/index.js";
|
|
4
4
|
export * from "./instant/index.js";
|
|
5
|
+
export * from "./intermodal/index.js";
|
|
5
6
|
export * from "./interval/index.js";
|
|
6
7
|
export * from "./plain/index.js";
|
|
7
8
|
export * from "./precision/index.js";
|
|
8
9
|
export * from "./regex/index.js";
|
|
9
10
|
export * from "./span/index.js";
|
|
11
|
+
export * from "./transport/index.js";
|
|
10
12
|
export * from "./types/index.js";
|
|
11
13
|
export * from "./unix/index.js";
|
|
12
14
|
export * from "./utc/index.js";
|
|
@@ -34,7 +34,7 @@ export type LocalTimeClassification = "unique" | "ambiguous" | "nonexistent";
|
|
|
34
34
|
* - Returns null on invalid input — never `"unique"`, which would read as a verdict.
|
|
35
35
|
*
|
|
36
36
|
* @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
|
|
37
|
-
* @param timeZone IANA
|
|
37
|
+
* @param timeZone IANA name or UTC offset the wall time is read in
|
|
38
38
|
* @returns "unique" | "ambiguous" | "nonexistent", or null on invalid input
|
|
39
39
|
*
|
|
40
40
|
* @example classifyLocal("2024-07-15T12:00:00", "America/New_York") // "unique"
|
|
@@ -22,7 +22,7 @@ import { plainToZoned } from "../../internal/index.js";
|
|
|
22
22
|
* - Returns null on invalid input — never `"unique"`, which would read as a verdict.
|
|
23
23
|
*
|
|
24
24
|
* @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
|
|
25
|
-
* @param timeZone IANA
|
|
25
|
+
* @param timeZone IANA name or UTC offset the wall time is read in
|
|
26
26
|
* @returns "unique" | "ambiguous" | "nonexistent", or null on invalid input
|
|
27
27
|
*
|
|
28
28
|
* @example classifyLocal("2024-07-15T12:00:00", "America/New_York") // "unique"
|
|
@@ -24,7 +24,9 @@ import type { OffsetInstant } from "./toOffsetInstant.js";
|
|
|
24
24
|
* - With a `timeZone`, a sub-minute offset is *written* rounded to the minute, because RFC
|
|
25
25
|
* 9557 has no field for the seconds — `Africa/Monrovia`'s `-00:44:30` renders as `-00:45`.
|
|
26
26
|
* The bracketed zone is what resolves it, so the instant stays exact and the round trip
|
|
27
|
-
* returns `-00:44:30`.
|
|
27
|
+
* returns `-00:44:30`. Two exceptions, both Temporal's own: a wall time repeated inside
|
|
28
|
+
* a sub-minute offset change reads back as its first pass (see `isValidInstant`), and a
|
|
29
|
+
* string whose local date is −271821-04-19 is refused by `toOffsetInstant`. Without a `timeZone` there is no zone to resolve against, so the
|
|
28
30
|
* full `±HH:MM:SS` is written instead; that is ISO 8601, not RFC 9557.
|
|
29
31
|
* - Returns `""` on invalid input.
|
|
30
32
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { formatUtcOffset, parseInstantNanoseconds, parseUtcOffsetNanoseconds, } from "../../internal/index.js";
|
|
2
|
+
import { formatUtcOffset, parseInstantNanoseconds, parseUtcOffsetNanoseconds, wallClockAtOffset, } from "../../internal/index.js";
|
|
3
3
|
import { utcOffset } from "../../regex/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Render an instant-plus-offset pair back to the local time it describes.
|
|
@@ -26,7 +26,9 @@ import { utcOffset } from "../../regex/index.js";
|
|
|
26
26
|
* - With a `timeZone`, a sub-minute offset is *written* rounded to the minute, because RFC
|
|
27
27
|
* 9557 has no field for the seconds — `Africa/Monrovia`'s `-00:44:30` renders as `-00:45`.
|
|
28
28
|
* The bracketed zone is what resolves it, so the instant stays exact and the round trip
|
|
29
|
-
* returns `-00:44:30`.
|
|
29
|
+
* returns `-00:44:30`. Two exceptions, both Temporal's own: a wall time repeated inside
|
|
30
|
+
* a sub-minute offset change reads back as its first pass (see `isValidInstant`), and a
|
|
31
|
+
* string whose local date is −271821-04-19 is refused by `toOffsetInstant`. Without a `timeZone` there is no zone to resolve against, so the
|
|
30
32
|
* full `±HH:MM:SS` is written instead; that is ISO 8601, not RFC 9557.
|
|
31
33
|
* - Returns `""` on invalid input.
|
|
32
34
|
*
|
|
@@ -75,16 +77,8 @@ export function fromOffsetInstant(value) {
|
|
|
75
77
|
return zoned.offset === offset ? zoned.toString() : "";
|
|
76
78
|
}
|
|
77
79
|
// With no zone, the offset is the only thing that can shift the instant onto a wall
|
|
78
|
-
// clock
|
|
79
|
-
|
|
80
|
-
// would reject the last 14 hours of the representable range — where a pair like
|
|
81
|
-
// `{ "+275760-09-13T00:00:00Z", "+14:00" }` names a local time that exists. No offset
|
|
82
|
-
// time zone is used either, since Temporal refuses to build one from a sub-minute
|
|
83
|
-
// offset.
|
|
84
|
-
const wallClock = instant
|
|
85
|
-
.toZonedDateTimeISO("UTC")
|
|
86
|
-
.toPlainDateTime()
|
|
87
|
-
.add({ nanoseconds: Number(offsetNanoseconds) });
|
|
80
|
+
// clock (`wallClockAtOffset` keeps both range limits and sub-minute offsets).
|
|
81
|
+
const wallClock = wallClockAtOffset(instant, offsetNanoseconds);
|
|
88
82
|
return `${wallClock.toString()}${offset}`;
|
|
89
83
|
}
|
|
90
84
|
catch {
|
|
@@ -6,11 +6,8 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
6
6
|
* into an instant takes a zone the sender did not send plus a policy for the two days a year
|
|
7
7
|
* the mapping is not one-to-one. This states both.
|
|
8
8
|
*
|
|
9
|
-
* - `
|
|
10
|
-
*
|
|
11
|
-
* `"compatible"` (the default, matching Temporal), `"earlier"`, `"later"`, or `"reject"`,
|
|
12
|
-
* which returns `""` rather than resolving. Call `classifyLocal` first to find out which
|
|
13
|
-
* case you are in before a policy is applied.
|
|
9
|
+
* - Call `classifyLocal` first to find out whether the wall time is ambiguous or nonexistent
|
|
10
|
+
* before a `disambiguation` policy is applied.
|
|
14
11
|
* - Returns a UTC instant, exactly — no rounding, so a nanosecond wall time survives. Pass it
|
|
15
12
|
* to `toOffsetInstant` for the offset pair, or reach for `convertPlainDateTimeToZoned` when
|
|
16
13
|
* what you want is the bracketed zoned string (it defaults to millisecond precision).
|
|
@@ -21,8 +18,8 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
21
18
|
* - Returns `""` on invalid input.
|
|
22
19
|
*
|
|
23
20
|
* @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
|
|
24
|
-
* @param timeZone IANA
|
|
25
|
-
* @param optionsArg
|
|
21
|
+
* @param timeZone IANA name or UTC offset the wall time is read in
|
|
22
|
+
* @param optionsArg How an ambiguous or nonexistent wall time is resolved
|
|
26
23
|
* @returns UTC instant string ending in "Z", or "" on invalid input
|
|
27
24
|
*
|
|
28
25
|
* @example resolveLocal("2024-07-15T12:00:00", "America/New_York") // "2024-07-15T16:00:00Z"
|
|
@@ -36,5 +33,13 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
36
33
|
* @example resolveLocal("2024-07-15T12:00:00", "Invalid/Zone") // ""
|
|
37
34
|
*/
|
|
38
35
|
export declare function resolveLocal(localDateTime: string, timeZone: string, optionsArg?: {
|
|
36
|
+
/**
|
|
37
|
+
* What happens when the wall time is ambiguous (a fall-back hour that happens twice) or
|
|
38
|
+
* nonexistent (a spring-forward hour that never happens). `"compatible"` takes the earlier
|
|
39
|
+
* instant of an ambiguous time and the later one of a nonexistent time, `"earlier"` and
|
|
40
|
+
* `"later"` take that side in both cases, and `"reject"` returns `""` rather than resolving.
|
|
41
|
+
*
|
|
42
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
43
|
+
*/
|
|
39
44
|
disambiguation?: Disambiguation;
|
|
40
45
|
}): string;
|
|
@@ -2,6 +2,7 @@ import { isValidDateTime } from "../../plain/validate/index.js";
|
|
|
2
2
|
import { isValidTimeZone } from "../../zoned/validate/index.js";
|
|
3
3
|
import { isoStringBody, zonedDateTimeFrom } from "../../internal/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
5
6
|
const DISAMBIGUATIONS = [
|
|
6
7
|
"compatible",
|
|
7
8
|
"earlier",
|
|
@@ -15,11 +16,8 @@ const DISAMBIGUATIONS = [
|
|
|
15
16
|
* into an instant takes a zone the sender did not send plus a policy for the two days a year
|
|
16
17
|
* the mapping is not one-to-one. This states both.
|
|
17
18
|
*
|
|
18
|
-
* - `
|
|
19
|
-
*
|
|
20
|
-
* `"compatible"` (the default, matching Temporal), `"earlier"`, `"later"`, or `"reject"`,
|
|
21
|
-
* which returns `""` rather than resolving. Call `classifyLocal` first to find out which
|
|
22
|
-
* case you are in before a policy is applied.
|
|
19
|
+
* - Call `classifyLocal` first to find out whether the wall time is ambiguous or nonexistent
|
|
20
|
+
* before a `disambiguation` policy is applied.
|
|
23
21
|
* - Returns a UTC instant, exactly — no rounding, so a nanosecond wall time survives. Pass it
|
|
24
22
|
* to `toOffsetInstant` for the offset pair, or reach for `convertPlainDateTimeToZoned` when
|
|
25
23
|
* what you want is the bracketed zoned string (it defaults to millisecond precision).
|
|
@@ -30,8 +28,8 @@ const DISAMBIGUATIONS = [
|
|
|
30
28
|
* - Returns `""` on invalid input.
|
|
31
29
|
*
|
|
32
30
|
* @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
|
|
33
|
-
* @param timeZone IANA
|
|
34
|
-
* @param optionsArg
|
|
31
|
+
* @param timeZone IANA name or UTC offset the wall time is read in
|
|
32
|
+
* @param optionsArg How an ambiguous or nonexistent wall time is resolved
|
|
35
33
|
* @returns UTC instant string ending in "Z", or "" on invalid input
|
|
36
34
|
*
|
|
37
35
|
* @example resolveLocal("2024-07-15T12:00:00", "America/New_York") // "2024-07-15T16:00:00Z"
|
|
@@ -49,9 +47,7 @@ export function resolveLocal(localDateTime, timeZone, optionsArg) {
|
|
|
49
47
|
if (!isOptionsArgument(optionsArg)) {
|
|
50
48
|
return "";
|
|
51
49
|
}
|
|
52
|
-
const disambiguation = optionsArg?.disambiguation
|
|
53
|
-
? "compatible"
|
|
54
|
-
: optionsArg.disambiguation;
|
|
50
|
+
const disambiguation = optionOrDefault(optionsArg?.disambiguation, "compatible");
|
|
55
51
|
if (!isValidDateTime(localDateTime) ||
|
|
56
52
|
!isValidTimeZone(timeZone) ||
|
|
57
53
|
!DISAMBIGUATIONS.includes(disambiguation)) {
|
|
@@ -1,6 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An absolute instant paired with the local UTC offset in force where the event happened.
|
|
3
|
+
*
|
|
4
|
+
* Neither `instant` nor `offset` derives from the other, which is why both are stored. It is
|
|
5
|
+
* the shape GS1 EPCIS 2.0 (`eventTime` + a required `eventTimeZoneOffset`), UN/EDIFACT DTM
|
|
6
|
+
* (qualifier `303`/`304`) and DICOM (`DT` + `&ZZXX`) all exchange.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* import { OffsetInstant } from "@northguild/gmt/instant";
|
|
10
|
+
* const pair: OffsetInstant = {
|
|
11
|
+
* instant: "2024-07-15T16:00:00Z",
|
|
12
|
+
* offset: "-04:00",
|
|
13
|
+
* timeZone: "America/New_York",
|
|
14
|
+
* };
|
|
15
|
+
*/
|
|
1
16
|
export interface OffsetInstant {
|
|
17
|
+
/**
|
|
18
|
+
* The UTC instant, ISO 8601 ending in `Z` (e.g. `2024-07-15T16:00:00Z`). Orders events globally.
|
|
19
|
+
*/
|
|
2
20
|
instant: string;
|
|
21
|
+
/**
|
|
22
|
+
* The UTC offset in force where the event happened, `±HH:MM` (or `±HH:MM:SS` for a pre-1972
|
|
23
|
+
* zone that did not run on a whole minute). Renders the event as the human on the ground saw it.
|
|
24
|
+
*/
|
|
3
25
|
offset: string;
|
|
26
|
+
/**
|
|
27
|
+
* The IANA name of the zone, when one is known. Most feeds send none, so `toOffsetInstant` leaves
|
|
28
|
+
* it out unless the string or its `timeZone` argument names a zone.
|
|
29
|
+
*
|
|
30
|
+
* @defaultValue None. The pair names no zone, and `offset` alone places the instant on a local
|
|
31
|
+
* clock.
|
|
32
|
+
*/
|
|
4
33
|
timeZone?: string;
|
|
5
34
|
}
|
|
6
35
|
/**
|
|
@@ -45,10 +74,15 @@ export interface OffsetInstant {
|
|
|
45
74
|
* rounding it would put the pair 30 seconds from the event it describes. Such a zone's
|
|
46
75
|
* *string* still carries the rounded `-00:45`, because RFC 9557 caps a written offset at
|
|
47
76
|
* minutes; the bracketed zone is what resolves it, so the instant stays exact.
|
|
77
|
+
* - A bracketed zone is checked as `Temporal.ZonedDateTime.from` checks it, which also rejects
|
|
78
|
+
* a local date of −271821-04-19. A zone west of Greenwich shows that date for the first hours
|
|
79
|
+
* of the instant range, so a zoned string written there
|
|
80
|
+
* (`-271821-04-19T23:59:00-00:01[Europe/London]`) returns null, although `isValidInstant`
|
|
81
|
+
* accepts it. Pass the instant in `Z` form with `timeZone` instead.
|
|
48
82
|
* - Returns null on invalid input, not a zero-offset pair — `+00:00` is a real offset.
|
|
49
83
|
*
|
|
50
84
|
* @param value ISO 8601 instant string, with an offset designator and optionally a bracketed zone
|
|
51
|
-
* @param timeZone optional IANA
|
|
85
|
+
* @param timeZone optional IANA name or UTC offset to read the offset in
|
|
52
86
|
* @returns `{ instant, offset, timeZone? }`, or null on invalid input
|
|
53
87
|
*
|
|
54
88
|
* @example toOffsetInstant("2024-07-15T12:00:00-04:00[America/New_York]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00", timeZone: "America/New_York" }
|
|
@@ -60,6 +94,8 @@ export interface OffsetInstant {
|
|
|
60
94
|
* @example toOffsetInstant("1969-12-31T23:15:30-00:45[Africa/Monrovia]") // { instant: "1970-01-01T00:00:00Z", offset: "-00:44:30", timeZone: "Africa/Monrovia" } — the zone, not the rounded offset, fixes the instant
|
|
61
95
|
* @example toOffsetInstant("2024-07-15T12:00:00-04:00[-04:00]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — a bracketed offset is not a zone, so no timeZone field
|
|
62
96
|
* @example toOffsetInstant("2024-07-15T12:00:00-05:00[America/New_York]") // null (offset contradicts the bracketed zone)
|
|
97
|
+
* @example toOffsetInstant("-271821-04-19T23:59:00-00:01[Europe/London]") // null (a bracketed zone on a local date before Temporal's date range)
|
|
98
|
+
* @example toOffsetInstant("-271821-04-20T00:00:15Z", "Europe/London") // { instant: "-271821-04-20T00:00:15Z", offset: "-00:01:15", timeZone: "Europe/London" }
|
|
63
99
|
* @example toOffsetInstant("2024-07-15T12:00:00-04:00[foo=bar]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — an elective annotation is ignored
|
|
64
100
|
* @example toOffsetInstant("2024-07-15T12:00:00-04:00[!foo=bar]") // null (an unknown critical annotation)
|
|
65
101
|
* @example toOffsetInstant("2024-07-15T12:00:00") // null (no offset designator)
|