@northguild/gmt 1.17.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +462 -22
- package/dist/calendar/calculate/bucketRange.d.ts +3 -3
- package/dist/calendar/calculate/bucketRange.js +6 -6
- package/dist/calendar/calculate/floorToZone.d.ts +5 -3
- package/dist/calendar/calculate/floorToZone.js +6 -5
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
- package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
- package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
- package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
- package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
- package/dist/calendar/calculate/getOrdinalDate.js +2 -3
- package/dist/calendar/calculate/getQuarter.d.ts +21 -9
- package/dist/calendar/calculate/getQuarter.js +8 -12
- package/dist/calendar/hours/addOperatingTime.d.ts +53 -0
- package/dist/calendar/hours/addOperatingTime.js +59 -0
- package/dist/calendar/hours/index.d.ts +7 -0
- package/dist/calendar/hours/index.js +7 -0
- package/dist/calendar/hours/isOpenAt.d.ts +39 -0
- package/dist/calendar/hours/isOpenAt.js +44 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
- package/dist/calendar/hours/nextCloseAt.js +51 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
- package/dist/calendar/hours/nextOpenAt.js +47 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
- package/dist/calendar/hours/operatingIntervals.js +52 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
- package/dist/calendar/hours/operatingTimeBetween.js +49 -0
- package/dist/calendar/hours/recurringWindows.d.ts +61 -0
- package/dist/calendar/hours/recurringWindows.js +80 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- package/dist/duration/calculate/durationAs.d.ts +13 -8
- package/dist/duration/calculate/durationAs.js +4 -8
- package/dist/duration/compare/compareDurations.d.ts +12 -6
- package/dist/duration/compare/compareDurations.js +3 -6
- package/dist/duration/format/formatDuration.d.ts +16 -4
- package/dist/duration/format/formatDuration.js +4 -5
- package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
- package/dist/duration/normalize/normalizeDuration.js +6 -15
- package/dist/duration/parse/parseDuration.d.ts +21 -3
- package/dist/duration/parse/parseDuration.js +1 -3
- package/dist/instant/convert/classifyLocal.d.ts +1 -1
- package/dist/instant/convert/classifyLocal.js +1 -1
- package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
- package/dist/instant/convert/fromOffsetInstant.js +3 -1
- package/dist/instant/convert/resolveLocal.d.ts +12 -7
- package/dist/instant/convert/resolveLocal.js +6 -10
- package/dist/instant/convert/toOffsetInstant.d.ts +22 -9
- package/dist/instant/convert/toOffsetInstant.js +10 -3
- package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
- package/dist/intermodal/calculate/billingTimeline.js +2 -2
- package/dist/intermodal/calculate/chargeableDays.d.ts +13 -11
- package/dist/intermodal/calculate/chargeableDays.js +4 -9
- package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
- package/dist/intermodal/calculate/demurrageClock.js +7 -7
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +5 -4
- package/dist/intermodal/calculate/freeTimeExpiry.js +6 -6
- package/dist/internal/businessCalendar.d.ts +5 -0
- package/dist/internal/businessCalendar.js +5 -1
- package/dist/internal/cycleFieldValue.d.ts +6 -4
- package/dist/internal/cycleFieldValue.js +6 -4
- package/dist/internal/daylightTime.d.ts +33 -0
- package/dist/internal/daylightTime.js +164 -0
- package/dist/internal/durationUntilString.js +4 -3
- package/dist/internal/englishCalendarNames.js +1 -2
- package/dist/internal/epochNanoseconds.d.ts +2 -0
- package/dist/internal/epochNanoseconds.js +2 -0
- package/dist/internal/exactDuration.d.ts +37 -0
- package/dist/internal/exactDuration.js +64 -0
- package/dist/internal/exactMoment.d.ts +72 -0
- package/dist/internal/exactMoment.js +114 -0
- package/dist/internal/fiscalCalendar.d.ts +4 -3
- package/dist/internal/fiscalCalendar.js +4 -3
- package/dist/internal/formatCalendarDays.d.ts +2 -2
- package/dist/internal/formatRelativeDuration.d.ts +21 -1
- package/dist/internal/formatRelativeDuration.js +47 -7
- package/dist/internal/index.d.ts +9 -4
- package/dist/internal/index.js +9 -4
- package/dist/internal/instantFormatOptions.js +2 -1
- package/dist/internal/instantNanoseconds.d.ts +75 -9
- package/dist/internal/instantNanoseconds.js +192 -11
- package/dist/internal/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +2 -2
- package/dist/internal/normalizeTimeZone.js +2 -2
- package/dist/internal/operatingSchedule.d.ts +129 -0
- package/dist/internal/operatingSchedule.js +668 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +2 -2
- package/dist/internal/patternToken.js +28 -13
- package/dist/internal/plainDateUntil.js +10 -6
- package/dist/internal/punctuality.d.ts +38 -0
- package/dist/internal/punctuality.js +59 -0
- package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
- package/dist/internal/readDateTimeFormatOptions.js +93 -0
- package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
- package/dist/internal/resolveDurationRelativeTo.js +11 -1
- package/dist/internal/resolveRelativeRounding.d.ts +17 -6
- package/dist/internal/resolveRelativeRounding.js +27 -7
- package/dist/internal/resolveRelativeUnit.d.ts +30 -0
- package/dist/internal/resolveRelativeUnit.js +40 -0
- package/dist/internal/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- package/dist/internal/startOrEndOfZoned.js +2 -3
- package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
- package/dist/internal/temporalCompat/capabilities.js +35 -3
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/repros.d.ts +1 -1
- package/dist/internal/temporalCompat/repros.js +157 -0
- package/dist/internal/timestampEvents.d.ts +32 -0
- package/dist/internal/timestampEvents.js +76 -0
- package/dist/internal/utcZonedDateTime.d.ts +5 -2
- package/dist/internal/utcZonedDateTime.js +8 -5
- package/dist/internal/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- package/dist/internal/zonedTransitionSearch.d.ts +27 -0
- package/dist/internal/zonedTransitionSearch.js +218 -0
- package/dist/internal/zonedWallClock.d.ts +21 -7
- package/dist/internal/zonedWallClock.js +87 -18
- package/dist/internal/zonedWallClockOperations.d.ts +26 -13
- package/dist/internal/zonedWallClockOperations.js +87 -34
- package/dist/interval/validate/isValidInterval.d.ts +6 -3
- package/dist/interval/validate/isValidInterval.js +6 -3
- package/dist/plain/calculate/addDate.d.ts +11 -8
- package/dist/plain/calculate/addDate.js +5 -8
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +1 -4
- package/dist/plain/calculate/cycleDate.d.ts +16 -7
- package/dist/plain/calculate/cycleDate.js +3 -7
- package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
- package/dist/plain/calculate/cycleDateTime.js +1 -4
- package/dist/plain/calculate/cycleTime.d.ts +10 -5
- package/dist/plain/calculate/cycleTime.js +3 -5
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDate.js +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.js +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +8 -3
- package/dist/plain/calculate/endOfDate.js +1 -3
- package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
- package/dist/plain/calculate/endOfDateTime.js +1 -5
- package/dist/plain/calculate/endOfTime.d.ts +8 -2
- package/dist/plain/calculate/endOfTime.js +1 -2
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
- package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
- package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
- package/dist/plain/calculate/getWeekOfMonth.js +7 -4
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
- package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
- package/dist/plain/calculate/getWeeksInMonth.js +5 -2
- package/dist/plain/calculate/nextWeekday.d.ts +7 -3
- package/dist/plain/calculate/nextWeekday.js +1 -3
- package/dist/plain/calculate/previousWeekday.d.ts +7 -3
- package/dist/plain/calculate/previousWeekday.js +1 -3
- package/dist/plain/calculate/roundDate.d.ts +20 -7
- package/dist/plain/calculate/roundDate.js +3 -10
- package/dist/plain/calculate/roundDateTime.d.ts +22 -8
- package/dist/plain/calculate/roundDateTime.js +3 -11
- package/dist/plain/calculate/roundTime.d.ts +20 -4
- package/dist/plain/calculate/roundTime.js +3 -7
- package/dist/plain/calculate/setDate.d.ts +7 -5
- package/dist/plain/calculate/setDate.js +1 -5
- package/dist/plain/calculate/setDateTime.d.ts +8 -5
- package/dist/plain/calculate/setDateTime.js +1 -5
- package/dist/plain/calculate/setTime.d.ts +10 -6
- package/dist/plain/calculate/setTime.js +4 -6
- package/dist/plain/calculate/startOfDate.d.ts +8 -2
- package/dist/plain/calculate/startOfDate.js +1 -2
- package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
- package/dist/plain/calculate/startOfDateTime.js +1 -2
- package/dist/plain/calculate/startOfTime.d.ts +8 -1
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +1 -4
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +1 -4
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
- package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
- package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
- package/dist/plain/compare/areDatesEqualBy.js +8 -6
- package/dist/plain/compare/isBetweenDate.d.ts +13 -2
- package/dist/plain/compare/isBetweenDate.js +4 -4
- package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenDateTime.js +4 -4
- package/dist/plain/compare/isBetweenTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenTime.js +4 -4
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +1 -1
- package/dist/plain/compare/isThisUnit.js +1 -1
- package/dist/plain/format/formatCalendar.d.ts +21 -14
- package/dist/plain/format/formatCalendar.js +21 -16
- package/dist/plain/format/formatDate.js +5 -3
- package/dist/plain/format/formatDateRange.js +4 -2
- package/dist/plain/format/formatDateTime.js +4 -2
- package/dist/plain/format/formatDateTimeRange.js +4 -2
- package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
- package/dist/plain/format/formatDateTimeToParts.js +10 -6
- package/dist/plain/format/formatDateToParts.d.ts +13 -2
- package/dist/plain/format/formatDateToParts.js +8 -4
- package/dist/plain/format/formatRelativeDate.d.ts +16 -3
- package/dist/plain/format/formatRelativeDate.js +26 -15
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +8 -5
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +21 -13
- package/dist/plain/format/formatTime.js +4 -2
- package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
- package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDate.js +1 -3
- package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
- package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
- package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDate.js +2 -0
- package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
- package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtTime.js +2 -0
- package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
- package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
- package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
- package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
- package/dist/plain/map/mapDatesInRange.d.ts +8 -4
- package/dist/plain/map/mapDatesInRange.js +1 -4
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateWithPattern.js +10 -7
- package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDate.js +3 -3
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
- package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDate.js +2 -6
- package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
- package/dist/plain/validate/isValidDateRange.d.ts +19 -4
- package/dist/plain/validate/isValidDateRange.js +1 -4
- package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidDateTimeRange.js +2 -5
- package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidTimeRange.js +2 -5
- package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
- package/dist/precision/convert/fromExcelSerial.js +4 -5
- package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
- package/dist/precision/convert/fromNanoseconds.js +1 -1
- package/dist/precision/convert/toExcelSerial.d.ts +9 -3
- package/dist/precision/convert/toExcelSerial.js +3 -4
- package/dist/precision/convert/toNanoseconds.d.ts +11 -6
- package/dist/precision/convert/toNanoseconds.js +11 -6
- package/dist/precision/validate/isValidInstant.d.ts +12 -3
- package/dist/precision/validate/isValidInstant.js +12 -3
- package/dist/span/calculate/spanMs.d.ts +10 -4
- package/dist/span/calculate/spanMs.js +10 -4
- package/dist/span/calculate/spanNs.d.ts +10 -4
- package/dist/span/calculate/spanNs.js +10 -4
- package/dist/span/validate/isValidSpan.d.ts +8 -3
- package/dist/span/validate/isValidSpan.js +8 -3
- package/dist/transport/calculate/bestAvailable.d.ts +47 -0
- package/dist/transport/calculate/bestAvailable.js +76 -0
- package/dist/transport/calculate/crossingTime.d.ts +58 -0
- package/dist/transport/calculate/crossingTime.js +76 -0
- package/dist/transport/calculate/cutoffAt.d.ts +90 -0
- package/dist/transport/calculate/cutoffAt.js +209 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
- package/dist/transport/calculate/cutoffSchedule.js +71 -0
- package/dist/transport/calculate/dwellTime.d.ts +16 -7
- package/dist/transport/calculate/dwellTime.js +12 -8
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +8 -0
- package/dist/transport/calculate/index.js +8 -0
- package/dist/transport/calculate/nextDeparture.d.ts +78 -0
- package/dist/transport/calculate/nextDeparture.js +131 -0
- package/dist/transport/calculate/punctualityRate.d.ts +42 -0
- package/dist/transport/calculate/punctualityRate.js +59 -0
- package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
- package/dist/transport/calculate/scheduleDelivery.js +300 -0
- package/dist/transport/calculate/transitTime.d.ts +21 -3
- package/dist/transport/calculate/transitTime.js +29 -46
- package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
- package/dist/transport/compare/classifyPunctuality.js +64 -0
- package/dist/transport/compare/index.d.ts +4 -0
- package/dist/transport/compare/index.js +4 -0
- package/dist/transport/compare/isPastCutoff.d.ts +33 -0
- package/dist/transport/compare/isPastCutoff.js +48 -0
- package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
- package/dist/transport/compare/scheduleDeviation.js +53 -0
- package/dist/transport/compare/timeToCutoff.d.ts +31 -0
- package/dist/transport/compare/timeToCutoff.js +47 -0
- package/dist/transport/convert/etaAtZone.d.ts +7 -0
- package/dist/transport/convert/etaAtZone.js +9 -4
- package/dist/transport/index.d.ts +1 -0
- package/dist/transport/index.js +1 -0
- package/dist/types/business-calendar.d.ts +19 -14
- package/dist/types/calendar-options.d.ts +15 -3
- package/dist/types/date-cycle-field.d.ts +5 -0
- package/dist/types/date-duration-unit.d.ts +4 -0
- package/dist/types/date-time-cycle-field.d.ts +4 -0
- package/dist/types/date-time-duration-units.d.ts +4 -0
- package/dist/types/date-time-unit.d.ts +4 -0
- package/dist/types/date-unit.d.ts +4 -0
- package/dist/types/disambiguation.d.ts +8 -0
- package/dist/types/duration-relative-to.d.ts +8 -0
- package/dist/types/duration-string-options.d.ts +28 -0
- package/dist/types/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +21 -11
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +2 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +71 -0
- package/dist/types/overflow.d.ts +6 -0
- package/dist/types/relative-rounding-method.d.ts +6 -0
- package/dist/types/relative-time-options.d.ts +33 -5
- package/dist/types/rounding-options.d.ts +27 -0
- package/dist/types/time-cycle-field.d.ts +4 -0
- package/dist/types/time-duration-unit.d.ts +4 -0
- package/dist/types/time-unit.d.ts +4 -0
- package/dist/types/transport-timestamps.d.ts +54 -0
- package/dist/types/transport-timestamps.js +0 -0
- package/dist/unix/calculate/addUnix.d.ts +19 -5
- package/dist/unix/calculate/addUnix.js +1 -5
- package/dist/unix/calculate/diffUnix.d.ts +13 -3
- package/dist/unix/calculate/diffUnix.js +1 -3
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/endOfUnix.d.ts +20 -4
- package/dist/unix/calculate/endOfUnix.js +1 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
- package/dist/unix/calculate/isBetweenUnix.js +4 -6
- package/dist/unix/calculate/roundUnix.d.ts +31 -3
- package/dist/unix/calculate/roundUnix.js +3 -6
- package/dist/unix/calculate/setUnix.d.ts +35 -9
- package/dist/unix/calculate/setUnix.js +4 -13
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/startOfUnix.d.ts +20 -4
- package/dist/unix/calculate/startOfUnix.js +1 -4
- package/dist/unix/calculate/subtractUnix.d.ts +19 -5
- package/dist/unix/calculate/subtractUnix.js +1 -5
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
- package/dist/unix/compare/areUnixEqualBy.js +13 -9
- package/dist/unix/compare/isAfterUnix.d.ts +7 -1
- package/dist/unix/compare/isAfterUnix.js +1 -1
- package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
- package/dist/unix/compare/isBeforeUnix.js +1 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
- package/dist/unix/convert/convertUnixToZoned.js +4 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
- package/dist/unix/format/formatCalendarUnix.js +4 -5
- package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
- package/dist/unix/format/formatRelativeUnix.js +3 -5
- package/dist/unix/format/formatUnix.d.ts +24 -6
- package/dist/unix/format/formatUnix.js +8 -7
- package/dist/unix/get/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
- package/dist/unix/interval/intervalCountUnix.js +2 -5
- package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
- package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
- package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
- package/dist/unix/interval/intervalLengthUnix.js +4 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
- package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
- package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
- package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
- package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
- package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseDateFromUnix.js +1 -2
- package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
- package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseTimeFromUnix.js +1 -2
- package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
- package/dist/unix/parse/parseUnitFromUnix.js +2 -3
- package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
- package/dist/unix/parse/parseWeekFromUnix.js +3 -7
- package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseYearFromUnix.js +2 -2
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +1 -4
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +16 -3
- package/dist/utc/calculate/endOfUtc.js +2 -3
- package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
- package/dist/utc/calculate/isBetweenUtc.js +4 -4
- package/dist/utc/calculate/roundUtc.d.ts +26 -9
- package/dist/utc/calculate/roundUtc.js +3 -12
- package/dist/utc/calculate/setUtc.d.ts +7 -4
- package/dist/utc/calculate/setUtc.js +1 -4
- package/dist/utc/calculate/startOfUtc.d.ts +15 -2
- package/dist/utc/calculate/startOfUtc.js +1 -2
- package/dist/utc/calculate/subtractUtc.d.ts +7 -4
- package/dist/utc/calculate/subtractUtc.js +1 -4
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
- package/dist/utc/convert/convertUtcToZoned.js +1 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
- package/dist/utc/format/formatCalendarUtc.js +8 -6
- package/dist/utc/format/formatHttp.d.ts +1 -1
- package/dist/utc/format/formatHttp.js +1 -1
- package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
- package/dist/utc/format/formatRelativeUtc.js +9 -11
- package/dist/utc/format/formatUtc.d.ts +17 -15
- package/dist/utc/format/formatUtc.js +8 -8
- package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
- package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
- package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
- package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
- package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
- package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
- package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDateFromUtc.js +1 -3
- package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayFromUtc.js +1 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
- package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseHourFromUtc.js +1 -3
- package/dist/utc/parse/parseHttp.d.ts +1 -1
- package/dist/utc/parse/parseHttp.js +1 -1
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
- package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMonthFromUtc.js +1 -3
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseSecondFromUtc.js +1 -3
- package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
- package/dist/utc/parse/parseTimeFromUtc.js +5 -6
- package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
- package/dist/utc/parse/parseUnitFromUtc.js +6 -8
- package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
- package/dist/utc/parse/parseWeekFromUtc.js +7 -13
- package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseYearFromUtc.js +1 -3
- package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +6 -13
- package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
- package/dist/zoned/calculate/cycleZoned.js +1 -8
- package/dist/zoned/calculate/diffZoned.d.ts +1 -1
- package/dist/zoned/calculate/diffZoned.js +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
- package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
- package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
- package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
- package/dist/zoned/calculate/roundZoned.d.ts +21 -4
- package/dist/zoned/calculate/roundZoned.js +3 -7
- package/dist/zoned/calculate/setZoned.d.ts +25 -8
- package/dist/zoned/calculate/setZoned.js +4 -12
- package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
- package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
- package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
- package/dist/zoned/calculate/startOfZoned.js +1 -3
- package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
- package/dist/zoned/calculate/subtractZoned.js +6 -13
- package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
- package/dist/zoned/compare/areZonedEqualBy.js +7 -5
- package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
- package/dist/zoned/compare/isBetweenZoned.js +4 -3
- package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
- package/dist/zoned/compare/isInDaylightSaving.js +40 -44
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
- package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
- package/dist/zoned/convert/convertZonedToUnix.js +2 -4
- package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
- package/dist/zoned/convert/convertZonedToZoned.js +1 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +13 -9
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +7 -4
- package/dist/zoned/format/formatRfc2822.d.ts +2 -2
- package/dist/zoned/format/formatRfc2822.js +2 -2
- package/dist/zoned/format/formatRfc3339.d.ts +2 -3
- package/dist/zoned/format/formatRfc3339.js +2 -3
- package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
- package/dist/zoned/format/formatTimeZoneName.js +5 -4
- package/dist/zoned/format/formatZonedDateTime.js +2 -1
- package/dist/zoned/format/formatZonedRange.js +2 -1
- package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
- package/dist/zoned/format/formatZonedToParts.js +8 -5
- package/dist/zoned/get/getDstTransitions.d.ts +9 -10
- package/dist/zoned/get/getDstTransitions.js +12 -3
- package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
- package/dist/zoned/get/getTimeZoneOffset.js +6 -3
- package/dist/zoned/get/getZonedNow.d.ts +13 -1
- package/dist/zoned/get/getZonedNow.js +12 -3
- package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
- package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
- package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
- package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
- package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
- package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
- package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
- package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
- package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
- package/dist/zoned/validate/hasDaylightSaving.js +47 -31
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
- package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
- package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
- package/dist/zoned/validate/isValidZonedRange.js +1 -4
- package/package.json +18 -5
- package/skills/gmt-arithmetic/SKILL.md +1 -1
- package/skills/gmt-basics/SKILL.md +10 -1
- package/skills/gmt-integration/SKILL.md +10 -5
- package/skills/gmt-timezone/SKILL.md +150 -21
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → operating-schedule.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { plainDateTimeFormatOptions } from "../../internal/plainFormatOptions.js";
|
|
3
3
|
import { isValidDateTime } from "../validate/index.js";
|
|
4
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Return the locale-formatted parts of a PlainDateTime.
|
|
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"`, `"literal"`.
|
|
@@ -26,8 +26,11 @@ import { isValidDateTime } from "../validate/index.js";
|
|
|
26
26
|
* zone field): a `timeZoneName` option is ignored, and a `"long"`/`"full"` `timeStyle` keeps its
|
|
27
27
|
* hour, minute and second and drops the zone, formatting as the locale's `"medium"` time. As in
|
|
28
28
|
* `Intl.DateTimeFormat`, `timeZoneName` together with `dateStyle`/`timeStyle` yields `[]`.
|
|
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.
|
|
33
36
|
* Pass `{ year: "numeric", month: "numeric", day: "numeric" }` to keep that output.
|
|
@@ -62,9 +65,10 @@ export function formatDateTimeToParts(value, locale, options) {
|
|
|
62
65
|
// PlainDateTime format may contain, so no zone field can appear.
|
|
63
66
|
// Constructing with the caller's options first surfaces the TypeError or
|
|
64
67
|
// RangeError Intl.DateTimeFormat raises for invalid ones.
|
|
65
|
-
|
|
68
|
+
const read = readDateTimeFormatOptions(options);
|
|
69
|
+
new Intl.DateTimeFormat(locale, read);
|
|
66
70
|
const epochMilliseconds = Temporal.PlainDateTime.from(value).toZonedDateTime("UTC").epochMilliseconds;
|
|
67
|
-
return new Intl.DateTimeFormat(locale, plainDateTimeFormatOptions(
|
|
71
|
+
return new Intl.DateTimeFormat(locale, plainDateTimeFormatOptions(read))
|
|
68
72
|
.formatToParts(epochMilliseconds)
|
|
69
73
|
.map((p) => ({ type: p.type, value: p.value }));
|
|
70
74
|
}
|
|
@@ -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` is one of:
|
|
11
10
|
* `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
|
|
12
11
|
* `"literal"`.
|
|
@@ -22,6 +21,9 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
|
|
|
22
21
|
* ignored. With both `dateStyle` and `timeStyle` the parts keep the date style and drop the
|
|
23
22
|
* `timeStyle` (the `Intl.DateTimeFormat` entry point, required ~any~), whereas the text sibling
|
|
24
23
|
* `formatDate` returns `""` (`PlainDate#toLocaleString`, required ~date~, is a TypeError).
|
|
24
|
+
* - The `formatZonedToParts` example below writes the literal before the day period as
|
|
25
|
+
* `"\u202f"`, U+202F NARROW NO-BREAK SPACE, which Node 22 and 24 return; Node 26 returns an
|
|
26
|
+
* ordinary space there (see `formatZonedToParts`).
|
|
25
27
|
* - Returns `[]` for invalid input.
|
|
26
28
|
* - **Compatibility:** before 1.16.0 time options leaked a UTC midnight and a `"UTC"` zone name
|
|
27
29
|
* into the parts. `formatZonedToParts` on the date at midnight UTC returns those parts.
|
|
@@ -44,6 +46,15 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
|
|
|
44
46
|
* @example formatDateToParts("2024-02-03", ["fr-FR", "en-US"]) // [{ type: "day", value: "03" }, { type: "literal", value: "/" }, …]
|
|
45
47
|
*/
|
|
46
48
|
export declare function formatDateToParts(value: string, locale?: string | string[], options?: DateTimeFormatOptions): Array<{
|
|
49
|
+
/**
|
|
50
|
+
* The kind of part, named as ECMA-402 `Intl.DateTimeFormat.prototype.formatToParts` names it: a
|
|
51
|
+
* field such as `"year"`, `"month"` or `"day"`, or `"literal"` for the separator text between
|
|
52
|
+
* fields.
|
|
53
|
+
*/
|
|
47
54
|
type: string;
|
|
55
|
+
/**
|
|
56
|
+
* The text of the part in the requested locale, exactly as the formatter wrote it. Joining every
|
|
57
|
+
* `value` in array order gives the whole formatted text.
|
|
58
|
+
*/
|
|
48
59
|
value: string;
|
|
49
60
|
}>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import { plainDateFormatOptions } from "../../internal/plainFormatOptions.js";
|
|
3
3
|
import { isValidDate } from "../validate/index.js";
|
|
4
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Return the locale-formatted parts of a PlainDate.
|
|
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` is one of:
|
|
13
13
|
* `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
|
|
14
14
|
* `"literal"`.
|
|
@@ -24,6 +24,9 @@ import { isValidDate } from "../validate/index.js";
|
|
|
24
24
|
* ignored. With both `dateStyle` and `timeStyle` the parts keep the date style and drop the
|
|
25
25
|
* `timeStyle` (the `Intl.DateTimeFormat` entry point, required ~any~), whereas the text sibling
|
|
26
26
|
* `formatDate` returns `""` (`PlainDate#toLocaleString`, required ~date~, is a TypeError).
|
|
27
|
+
* - The `formatZonedToParts` example below writes the literal before the day period as
|
|
28
|
+
* `"\u202f"`, U+202F NARROW NO-BREAK SPACE, which Node 22 and 24 return; Node 26 returns an
|
|
29
|
+
* ordinary space there (see `formatZonedToParts`).
|
|
27
30
|
* - Returns `[]` for invalid input.
|
|
28
31
|
* - **Compatibility:** before 1.16.0 time options leaked a UTC midnight and a `"UTC"` zone name
|
|
29
32
|
* into the parts. `formatZonedToParts` on the date at midnight UTC returns those parts.
|
|
@@ -56,8 +59,9 @@ export function formatDateToParts(value, locale, options) {
|
|
|
56
59
|
// PlainDate format may contain, so no time or zone field can appear.
|
|
57
60
|
// Constructing with the caller's options first surfaces the TypeError or
|
|
58
61
|
// RangeError Intl.DateTimeFormat raises for invalid ones.
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
const read = readDateTimeFormatOptions(options);
|
|
63
|
+
new Intl.DateTimeFormat(locale, read);
|
|
64
|
+
const resolved = plainDateFormatOptions(read);
|
|
61
65
|
if (resolved === null) {
|
|
62
66
|
return [];
|
|
63
67
|
}
|
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
import type { RelativeDateUnit, RelativeTimeFormatOptions } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for `formatRelativeDate`: the reference date, the display unit, the rounding and the
|
|
4
|
+
* wording.
|
|
5
|
+
*/
|
|
2
6
|
export interface FormatRelativeDateOptions extends RelativeTimeFormatOptions {
|
|
3
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The unit the distance is written in, whatever its size: `"day"`, `"week"`, `"month"` or
|
|
9
|
+
* `"year"`, singular or plural. Any other value returns `""`, a time unit such as `"hour"`
|
|
10
|
+
* included: a date has no time, and Temporal throws RangeError for a unit outside the units of
|
|
11
|
+
* the type. Omitted, the unit is picked from the distance: day under 7 days, week under 28,
|
|
12
|
+
* month under 365 and year beyond.
|
|
13
|
+
*
|
|
14
|
+
* @defaultValue None. The unit is picked from the distance.
|
|
15
|
+
*/
|
|
16
|
+
largestUnit?: RelativeDateUnit | `${RelativeDateUnit}s`;
|
|
4
17
|
}
|
|
5
18
|
/**
|
|
6
19
|
* Format the relative time between a plain date and a reference date.
|
|
7
20
|
*
|
|
8
21
|
* - Auto-picks the display unit (day/week/month/year) based on the distance, unless
|
|
9
22
|
* `largestUnit` forces one.
|
|
10
|
-
* - `
|
|
23
|
+
* - `largestUnit` is one of those four units, singular or plural. Any other value returns `""`.
|
|
11
24
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
12
25
|
* Temporal's GetOptionsObject rejects it.
|
|
13
26
|
*
|
|
14
27
|
* @param value ISO date string to format
|
|
15
28
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
16
|
-
* @param options
|
|
29
|
+
* @param options How the distance is measured, rounded and worded
|
|
17
30
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
18
31
|
*
|
|
19
32
|
* @example formatRelativeDate("2026-01-15", "en-US", { reference: "2026-04-15" }) // "3 months ago"
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { durationTotal
|
|
2
|
+
import { durationTotal } from "../../internal/index.js";
|
|
3
|
+
import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
|
|
3
4
|
import { isValidDate } from "../validate/index.js";
|
|
5
|
+
import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
|
|
6
|
+
// Temporal's date unit group: the units a PlainDate difference may be written in.
|
|
7
|
+
const DATE_UNITS = [
|
|
8
|
+
"year",
|
|
9
|
+
"month",
|
|
10
|
+
"week",
|
|
11
|
+
"day",
|
|
12
|
+
];
|
|
4
13
|
const AUTO_UNITS = [
|
|
5
14
|
{ unit: "day", maxDays: 7 },
|
|
6
15
|
{ unit: "week", maxDays: 28 },
|
|
@@ -12,13 +21,13 @@ const AUTO_UNITS = [
|
|
|
12
21
|
*
|
|
13
22
|
* - Auto-picks the display unit (day/week/month/year) based on the distance, unless
|
|
14
23
|
* `largestUnit` forces one.
|
|
15
|
-
* - `
|
|
24
|
+
* - `largestUnit` is one of those four units, singular or plural. Any other value returns `""`.
|
|
16
25
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
17
26
|
* Temporal's GetOptionsObject rejects it.
|
|
18
27
|
*
|
|
19
28
|
* @param value ISO date string to format
|
|
20
29
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
21
|
-
* @param options
|
|
30
|
+
* @param options How the distance is measured, rounded and worded
|
|
22
31
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
23
32
|
*
|
|
24
33
|
* @example formatRelativeDate("2026-01-15", "en-US", { reference: "2026-04-15" }) // "3 months ago"
|
|
@@ -35,30 +44,32 @@ export function formatRelativeDate(value, locale, options = {}) {
|
|
|
35
44
|
return "";
|
|
36
45
|
if (!isValidDate(value))
|
|
37
46
|
return "";
|
|
38
|
-
|
|
47
|
+
// Each option is read once (GetOption).
|
|
48
|
+
const referenceOption = options.reference;
|
|
49
|
+
if (referenceOption !== undefined && !isValidDate(referenceOption))
|
|
39
50
|
return "";
|
|
40
51
|
try {
|
|
52
|
+
const forcedUnit = resolveRelativeUnit(options.largestUnit, DATE_UNITS);
|
|
53
|
+
const roundingMethod = options.roundingMethod;
|
|
41
54
|
const target = Temporal.PlainDate.from(value);
|
|
42
|
-
const reference =
|
|
43
|
-
? Temporal.PlainDate.from(
|
|
55
|
+
const reference = referenceOption
|
|
56
|
+
? Temporal.PlainDate.from(referenceOption)
|
|
44
57
|
: Temporal.Now.plainDateISO();
|
|
45
58
|
const diff = target.since(reference);
|
|
46
59
|
const absDays = Math.abs(diff.total("day"));
|
|
47
|
-
const unit =
|
|
60
|
+
const unit = forcedUnit === undefined
|
|
48
61
|
? (AUTO_UNITS.find((t) => absDays < t.maxDays)?.unit ?? "year")
|
|
49
|
-
:
|
|
50
|
-
let
|
|
62
|
+
: forcedUnit;
|
|
63
|
+
let total;
|
|
51
64
|
try {
|
|
52
|
-
|
|
65
|
+
total = diff.total(unit);
|
|
53
66
|
}
|
|
54
67
|
catch {
|
|
55
68
|
// month/year are calendrical and need a relativeTo anchor
|
|
56
|
-
|
|
69
|
+
total = durationTotal(diff, unit, reference);
|
|
57
70
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
style: options.style === undefined ? "long" : options.style,
|
|
61
|
-
}).format(amount, unit));
|
|
71
|
+
// Outside the retry: an invalid roundingMethod throws once, straight to the sentinel.
|
|
72
|
+
return formatRelativeAmount(total, unit, locale, options, roundingMethod);
|
|
62
73
|
}
|
|
63
74
|
catch {
|
|
64
75
|
return "";
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { RelativeDateTimeUnit, RelativeTimeFormatOptions } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for `formatRelativeDateTime`: the reference date-time, the display unit, the rounding
|
|
4
|
+
* and the wording.
|
|
5
|
+
*/
|
|
2
6
|
export interface FormatRelativeDateTimeOptions extends RelativeTimeFormatOptions {
|
|
3
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The unit the distance is written in, whatever its size: `"second"`, `"minute"`, `"hour"`,
|
|
9
|
+
* `"day"`, `"week"`, `"month"` or `"year"`, singular or plural. Any other value returns `""`.
|
|
10
|
+
* Omitted, the unit is picked from the distance: second under a minute, minute under an hour,
|
|
11
|
+
* hour under a day, day under 7 days, week under 28, month under 365 and year beyond.
|
|
12
|
+
*
|
|
13
|
+
* @defaultValue None. The unit is picked from the distance.
|
|
14
|
+
*/
|
|
15
|
+
largestUnit?: RelativeDateTimeUnit | `${RelativeDateTimeUnit}s`;
|
|
4
16
|
}
|
|
5
17
|
/**
|
|
6
18
|
* Format the relative time between a plain date-time and a reference date-time.
|
|
@@ -11,13 +23,14 @@ export interface FormatRelativeDateTimeOptions extends RelativeTimeFormatOptions
|
|
|
11
23
|
* "3 years ago".
|
|
12
24
|
* - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
|
|
13
25
|
* Pass `largestUnit: "day"` to keep a day count.
|
|
14
|
-
* - `
|
|
26
|
+
* - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
|
|
27
|
+
* other value returns `""`.
|
|
15
28
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
16
29
|
* Temporal's GetOptionsObject rejects it.
|
|
17
30
|
*
|
|
18
31
|
* @param value ISO date-time string to format
|
|
19
32
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
20
|
-
* @param options
|
|
33
|
+
* @param options How the distance is measured, rounded and worded
|
|
21
34
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
22
35
|
*
|
|
23
36
|
* @example formatRelativeDateTime("2026-03-17T09:00:00", "en-GB", { style: "long", reference: "2026-03-17T06:00:00" }) // "in 3 hours"
|
|
@@ -12,13 +12,14 @@ import { isValidDateTime } from "../validate/index.js";
|
|
|
12
12
|
* "3 years ago".
|
|
13
13
|
* - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
|
|
14
14
|
* Pass `largestUnit: "day"` to keep a day count.
|
|
15
|
-
* - `
|
|
15
|
+
* - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
|
|
16
|
+
* other value returns `""`.
|
|
16
17
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
17
18
|
* Temporal's GetOptionsObject rejects it.
|
|
18
19
|
*
|
|
19
20
|
* @param value ISO date-time string to format
|
|
20
21
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
21
|
-
* @param options
|
|
22
|
+
* @param options How the distance is measured, rounded and worded
|
|
22
23
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
23
24
|
*
|
|
24
25
|
* @example formatRelativeDateTime("2026-03-17T09:00:00", "en-GB", { style: "long", reference: "2026-03-17T06:00:00" }) // "in 3 hours"
|
|
@@ -36,12 +37,14 @@ export function formatRelativeDateTime(value, locale, options = {}) {
|
|
|
36
37
|
return "";
|
|
37
38
|
if (!isValidDateTime(value))
|
|
38
39
|
return "";
|
|
39
|
-
|
|
40
|
+
// Each option is read once (GetOption).
|
|
41
|
+
const referenceOption = options.reference;
|
|
42
|
+
if (referenceOption !== undefined && !isValidDateTime(referenceOption))
|
|
40
43
|
return "";
|
|
41
44
|
try {
|
|
42
45
|
const target = Temporal.PlainDateTime.from(value);
|
|
43
|
-
const reference =
|
|
44
|
-
? Temporal.PlainDateTime.from(
|
|
46
|
+
const reference = referenceOption
|
|
47
|
+
? Temporal.PlainDateTime.from(referenceOption)
|
|
45
48
|
: Temporal.Now.plainDateTimeISO();
|
|
46
49
|
const diff = target.since(reference);
|
|
47
50
|
// month/year are calendrical — relativeTo needs a PlainDate
|
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
import type { RelativeTimeFormatOptions, RelativeTimeUnit } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for `formatRelativeTime`: the reference time, the display unit, the rounding and the
|
|
4
|
+
* wording.
|
|
5
|
+
*/
|
|
2
6
|
export interface FormatRelativeTimeOptions extends RelativeTimeFormatOptions {
|
|
3
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The unit the distance is written in, whatever its size: `"second"`, `"minute"` or `"hour"`,
|
|
9
|
+
* singular or plural. Any other value returns `""`, a date unit such as `"day"` included: a time
|
|
10
|
+
* has no date, and Temporal throws RangeError for a unit outside the units of the type. Omitted,
|
|
11
|
+
* the unit is picked from the distance: second under a minute, minute under an hour and hour
|
|
12
|
+
* beyond.
|
|
13
|
+
*
|
|
14
|
+
* @defaultValue None. The unit is picked from the distance.
|
|
15
|
+
*/
|
|
16
|
+
largestUnit?: RelativeTimeUnit | `${RelativeTimeUnit}s`;
|
|
4
17
|
}
|
|
5
18
|
/**
|
|
6
19
|
* Format the relative time between a plain time and a reference time.
|
|
7
20
|
*
|
|
8
21
|
* - Auto-picks the display unit (second/minute/hour) based on the distance, unless
|
|
9
22
|
* `largestUnit` forces one.
|
|
10
|
-
* - `
|
|
23
|
+
* - `largestUnit` is one of those three units, singular or plural. Any other value returns `""`.
|
|
11
24
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
12
25
|
* Temporal's GetOptionsObject rejects it.
|
|
13
26
|
*
|
|
14
27
|
* @param value ISO time string to format
|
|
15
28
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
16
|
-
* @param options
|
|
29
|
+
* @param options How the distance is measured, rounded and worded
|
|
17
30
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
18
31
|
*
|
|
19
32
|
* @example formatRelativeTime("14:30:00", "en-US", { style: "short", reference: "16:30:00" }) // "2 hr. ago"
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import {
|
|
2
|
+
import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
|
|
3
3
|
import { isValidTime } from "../validate/index.js";
|
|
4
|
+
import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
|
|
5
|
+
// Temporal's time unit group down to the second: the units a PlainTime difference may be written
|
|
6
|
+
// in, less the sub-second units, which Intl.RelativeTimeFormat does not have.
|
|
7
|
+
const TIME_UNITS = [
|
|
8
|
+
"hour",
|
|
9
|
+
"minute",
|
|
10
|
+
"second",
|
|
11
|
+
];
|
|
4
12
|
const AUTO_UNITS = [
|
|
5
13
|
{ unit: "second", maxSeconds: 60 },
|
|
6
14
|
{ unit: "minute", maxSeconds: 3_600 },
|
|
@@ -11,13 +19,13 @@ const AUTO_UNITS = [
|
|
|
11
19
|
*
|
|
12
20
|
* - Auto-picks the display unit (second/minute/hour) based on the distance, unless
|
|
13
21
|
* `largestUnit` forces one.
|
|
14
|
-
* - `
|
|
22
|
+
* - `largestUnit` is one of those three units, singular or plural. Any other value returns `""`.
|
|
15
23
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
16
24
|
* Temporal's GetOptionsObject rejects it.
|
|
17
25
|
*
|
|
18
26
|
* @param value ISO time string to format
|
|
19
27
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
20
|
-
* @param options
|
|
28
|
+
* @param options How the distance is measured, rounded and worded
|
|
21
29
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
22
30
|
*
|
|
23
31
|
* @example formatRelativeTime("14:30:00", "en-US", { style: "short", reference: "16:30:00" }) // "2 hr. ago"
|
|
@@ -34,23 +42,23 @@ export function formatRelativeTime(value, locale, options = {}) {
|
|
|
34
42
|
return "";
|
|
35
43
|
if (!isValidTime(value))
|
|
36
44
|
return "";
|
|
37
|
-
|
|
45
|
+
// Each option is read once (GetOption).
|
|
46
|
+
const referenceOption = options.reference;
|
|
47
|
+
if (referenceOption !== undefined && !isValidTime(referenceOption))
|
|
38
48
|
return "";
|
|
39
49
|
try {
|
|
50
|
+
const forcedUnit = resolveRelativeUnit(options.largestUnit, TIME_UNITS);
|
|
51
|
+
const roundingMethod = options.roundingMethod;
|
|
40
52
|
const target = Temporal.PlainTime.from(value);
|
|
41
|
-
const reference =
|
|
42
|
-
? Temporal.PlainTime.from(
|
|
53
|
+
const reference = referenceOption
|
|
54
|
+
? Temporal.PlainTime.from(referenceOption)
|
|
43
55
|
: Temporal.Now.plainTimeISO();
|
|
44
56
|
const diff = target.since(reference);
|
|
45
57
|
const absSeconds = Math.abs(diff.total("second"));
|
|
46
|
-
const unit =
|
|
58
|
+
const unit = forcedUnit === undefined
|
|
47
59
|
? (AUTO_UNITS.find((t) => absSeconds < t.maxSeconds)?.unit ?? "hour")
|
|
48
|
-
:
|
|
49
|
-
|
|
50
|
-
return normalizeDateTime(new Intl.RelativeTimeFormat(locale, {
|
|
51
|
-
numeric: options.numeric === undefined ? "auto" : options.numeric,
|
|
52
|
-
style: options.style === undefined ? "long" : options.style,
|
|
53
|
-
}).format(amount, unit));
|
|
60
|
+
: forcedUnit;
|
|
61
|
+
return formatRelativeAmount(diff.total(unit), unit, locale, options, roundingMethod);
|
|
54
62
|
}
|
|
55
63
|
catch {
|
|
56
64
|
return "";
|
|
@@ -2,6 +2,7 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
2
2
|
import { normalizeDateTime } from "../../internal/index.js";
|
|
3
3
|
import { plainTimeFormatOptions } from "../../internal/plainFormatOptions.js";
|
|
4
4
|
import { isValidTime } from "../validate/index.js";
|
|
5
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
5
6
|
/**
|
|
6
7
|
* Return a localized string for a PlainTime ISO input using Intl options.
|
|
7
8
|
*
|
|
@@ -42,8 +43,9 @@ export function formatTime(value, locale, options) {
|
|
|
42
43
|
// (CreateDateTimeFormat ~time~, ~time~). Constructing with the caller's
|
|
43
44
|
// options first surfaces the TypeError or RangeError Intl.DateTimeFormat
|
|
44
45
|
// raises for invalid ones.
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
const read = readDateTimeFormatOptions(options);
|
|
47
|
+
new Intl.DateTimeFormat(locale, read);
|
|
48
|
+
const resolved = plainTimeFormatOptions(read);
|
|
47
49
|
if (resolved === null) {
|
|
48
50
|
return "";
|
|
49
51
|
}
|
|
@@ -32,6 +32,15 @@
|
|
|
32
32
|
* @example intervalDifferenceDate("invalid", "2024-12-31", "2024-06-01", "2024-07-01") // []
|
|
33
33
|
*/
|
|
34
34
|
export declare function intervalDifferenceDate(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
|
|
35
|
+
/**
|
|
36
|
+
* The date the interval begins on, as an ISO 8601 date (`YYYY-MM-DD`). It keeps a calendar
|
|
37
|
+
* annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
38
|
+
*/
|
|
35
39
|
start: string;
|
|
40
|
+
/**
|
|
41
|
+
* The first date after the interval, in the same format as `start`. It is exclusive: the interval
|
|
42
|
+
* holds everything from `start` up to but not including this value. It is always later than
|
|
43
|
+
* `start`.
|
|
44
|
+
*/
|
|
36
45
|
end: string;
|
|
37
46
|
}>;
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
* @example intervalDifferenceDateTime("invalid", "2024-12-31T17:00:00", "2024-06-01T12:00:00", "2024-07-01T13:00:00") // []
|
|
26
26
|
*/
|
|
27
27
|
export declare function intervalDifferenceDateTime(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
|
|
28
|
+
/**
|
|
29
|
+
* The date-time the interval begins at, as an ISO 8601 date-time string with no offset or time
|
|
30
|
+
* zone.
|
|
31
|
+
*/
|
|
28
32
|
start: string;
|
|
33
|
+
/**
|
|
34
|
+
* The first date-time after the interval, in the same format as `start`. It is exclusive: the
|
|
35
|
+
* interval holds everything from `start` up to but not including this value. It is always later
|
|
36
|
+
* than `start`.
|
|
37
|
+
*/
|
|
29
38
|
end: string;
|
|
30
39
|
}>;
|
|
@@ -27,6 +27,15 @@
|
|
|
27
27
|
* @example intervalDifferenceTime("invalid", "17:00:00", "12:00:00", "13:00:00") // []
|
|
28
28
|
*/
|
|
29
29
|
export declare function intervalDifferenceTime(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
|
|
30
|
+
/**
|
|
31
|
+
* The clock time the interval begins at, as an ISO 8601 time string with no date, offset or time
|
|
32
|
+
* zone.
|
|
33
|
+
*/
|
|
30
34
|
start: string;
|
|
35
|
+
/**
|
|
36
|
+
* The first clock time after the interval, in the same format as `start`. It is exclusive: the
|
|
37
|
+
* interval holds everything from `start` up to but not including this value. It is always later
|
|
38
|
+
* than `start`.
|
|
39
|
+
*/
|
|
31
40
|
end: string;
|
|
32
41
|
}>;
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* the nearest whole day (`round(totalDays · i / n)`, computed exactly in `bigint`, an exact half
|
|
11
11
|
* rounding up) — when `totalDays` isn't evenly divisible by `n`, the resulting sub-intervals
|
|
12
12
|
* differ by at most one day rather than being mathematically exact.
|
|
13
|
+
* - When `n` is larger than the number of whole days in the interval, some pieces are empty (their
|
|
14
|
+
* `start` equals their `end`): the result always has exactly `n` pieces.
|
|
13
15
|
* - `n === 1` returns the original interval unchanged, as a single-element array.
|
|
14
16
|
* - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
|
|
15
17
|
* - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
|
|
@@ -18,14 +20,11 @@
|
|
|
18
20
|
* carry the *same* calendar tag (or both be bare ISO); a mismatch returns `[]` (E5 decision
|
|
19
21
|
* of record D4). Internal boundaries are computed in whole days (calendar-independent), then
|
|
20
22
|
* re-formatted in the shared calendar.
|
|
21
|
-
* - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
|
|
22
|
-
* exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
|
|
23
|
-
* before building any piece. An invalid `maxPieces` also returns `[]`.
|
|
24
23
|
*
|
|
25
24
|
* @param start ISO PlainDate string for the interval start, optionally calendar-annotated
|
|
26
25
|
* @param end ISO PlainDate string for the interval end, optionally calendar-annotated
|
|
27
26
|
* @param n number of equal sub-intervals to produce (positive integer)
|
|
28
|
-
* @param options
|
|
27
|
+
* @param options The limit on the size of the result
|
|
29
28
|
* @returns array of `n` `{ start, end }` records, or `[]` on invalid input / mismatched calendars
|
|
30
29
|
*
|
|
31
30
|
* @example intervalDivideEquallyDate("2024-01-01", "2024-01-05", 4) // [{ start: "2024-01-01", end: "2024-01-02" }, { start: "2024-01-02", end: "2024-01-03" }, { start: "2024-01-03", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-05" }]
|
|
@@ -38,8 +37,24 @@
|
|
|
38
37
|
* @example intervalDivideEquallyDate("2024-01-01", "2024-01-10", 3, { maxPieces: 3 }) // [{ start: "2024-01-01", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-07" }, { start: "2024-01-07", end: "2024-01-10" }]
|
|
39
38
|
*/
|
|
40
39
|
export declare function intervalDivideEquallyDate(start: string, end: string, n: number, options?: {
|
|
40
|
+
/**
|
|
41
|
+
* The most records the result may hold. A result that would hold more, or more than the longest
|
|
42
|
+
* possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
|
|
43
|
+
* positive safe integer also returns `[]`.
|
|
44
|
+
*
|
|
45
|
+
* @defaultValue `1_000_000`
|
|
46
|
+
*/
|
|
41
47
|
maxPieces?: number;
|
|
42
48
|
}): Array<{
|
|
49
|
+
/**
|
|
50
|
+
* The date the interval begins on, as an ISO 8601 date (`YYYY-MM-DD`). It keeps a calendar
|
|
51
|
+
* annotation such as `[u-ca=hebrew]` when the inputs carry one.
|
|
52
|
+
*/
|
|
43
53
|
start: string;
|
|
54
|
+
/**
|
|
55
|
+
* The first date after the interval, in the same format as `start`. It is exclusive: the interval
|
|
56
|
+
* holds everything from `start` up to but not including this value. It can equal `start`, which
|
|
57
|
+
* makes the interval empty.
|
|
58
|
+
*/
|
|
44
59
|
end: string;
|
|
45
60
|
}>;
|
|
@@ -15,6 +15,8 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
|
|
|
15
15
|
* the nearest whole day (`round(totalDays · i / n)`, computed exactly in `bigint`, an exact half
|
|
16
16
|
* rounding up) — when `totalDays` isn't evenly divisible by `n`, the resulting sub-intervals
|
|
17
17
|
* differ by at most one day rather than being mathematically exact.
|
|
18
|
+
* - When `n` is larger than the number of whole days in the interval, some pieces are empty (their
|
|
19
|
+
* `start` equals their `end`): the result always has exactly `n` pieces.
|
|
18
20
|
* - `n === 1` returns the original interval unchanged, as a single-element array.
|
|
19
21
|
* - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
|
|
20
22
|
* - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
|
|
@@ -23,14 +25,11 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
|
|
|
23
25
|
* carry the *same* calendar tag (or both be bare ISO); a mismatch returns `[]` (E5 decision
|
|
24
26
|
* of record D4). Internal boundaries are computed in whole days (calendar-independent), then
|
|
25
27
|
* re-formatted in the shared calendar.
|
|
26
|
-
* - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
|
|
27
|
-
* exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
|
|
28
|
-
* before building any piece. An invalid `maxPieces` also returns `[]`.
|
|
29
28
|
*
|
|
30
29
|
* @param start ISO PlainDate string for the interval start, optionally calendar-annotated
|
|
31
30
|
* @param end ISO PlainDate string for the interval end, optionally calendar-annotated
|
|
32
31
|
* @param n number of equal sub-intervals to produce (positive integer)
|
|
33
|
-
* @param options
|
|
32
|
+
* @param options The limit on the size of the result
|
|
34
33
|
* @returns array of `n` `{ start, end }` records, or `[]` on invalid input / mismatched calendars
|
|
35
34
|
*
|
|
36
35
|
* @example intervalDivideEquallyDate("2024-01-01", "2024-01-05", 4) // [{ start: "2024-01-01", end: "2024-01-02" }, { start: "2024-01-02", end: "2024-01-03" }, { start: "2024-01-03", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-05" }]
|
|
@@ -10,18 +10,17 @@
|
|
|
10
10
|
* `bigint`: the split is exact whenever the total divides evenly by `n`, and within half a
|
|
11
11
|
* nanosecond of the exact cut otherwise (an exact half rounds up), at any span length — the
|
|
12
12
|
* whole PlainDateTime range included.
|
|
13
|
+
* - When `n` is larger than the number of nanoseconds in the interval, some pieces are empty (their
|
|
14
|
+
* `start` equals their `end`): the result always has exactly `n` pieces.
|
|
13
15
|
* - `n === 1` returns the original interval unchanged, as a single-element array.
|
|
14
16
|
* - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
|
|
15
17
|
* - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
|
|
16
18
|
* start/end, `start > end`).
|
|
17
|
-
* - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
|
|
18
|
-
* exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
|
|
19
|
-
* before building any piece. An invalid `maxPieces` also returns `[]`.
|
|
20
19
|
*
|
|
21
20
|
* @param start ISO PlainDateTime string for the interval start
|
|
22
21
|
* @param end ISO PlainDateTime string for the interval end
|
|
23
22
|
* @param n number of equal sub-intervals to produce (positive integer)
|
|
24
|
-
* @param options
|
|
23
|
+
* @param options The limit on the size of the result
|
|
25
24
|
* @returns array of `n` `{ start, end }` records, or `[]` on invalid input
|
|
26
25
|
*
|
|
27
26
|
* @example intervalDivideEquallyDateTime("2024-01-01T00:00:00", "2024-01-04T00:00:00", 3) // [{ start: "2024-01-01T00:00:00", end: "2024-01-02T00:00:00" }, { start: "2024-01-02T00:00:00", end: "2024-01-03T00:00:00" }, { start: "2024-01-03T00:00:00", end: "2024-01-04T00:00:00" }]
|
|
@@ -32,8 +31,24 @@
|
|
|
32
31
|
* @example intervalDivideEquallyDateTime("2024-01-01T00:00:00", "2024-01-04T00:00:00", 3, { maxPieces: 3 }) // [{ start: "2024-01-01T00:00:00", end: "2024-01-02T00:00:00" }, { start: "2024-01-02T00:00:00", end: "2024-01-03T00:00:00" }, { start: "2024-01-03T00:00:00", end: "2024-01-04T00:00:00" }]
|
|
33
32
|
*/
|
|
34
33
|
export declare function intervalDivideEquallyDateTime(start: string, end: string, n: number, options?: {
|
|
34
|
+
/**
|
|
35
|
+
* The most records the result may hold. A result that would hold more, or more than the longest
|
|
36
|
+
* possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
|
|
37
|
+
* positive safe integer also returns `[]`.
|
|
38
|
+
*
|
|
39
|
+
* @defaultValue `1_000_000`
|
|
40
|
+
*/
|
|
35
41
|
maxPieces?: number;
|
|
36
42
|
}): Array<{
|
|
43
|
+
/**
|
|
44
|
+
* The date-time the interval begins at, as an ISO 8601 date-time string with no offset or time
|
|
45
|
+
* zone.
|
|
46
|
+
*/
|
|
37
47
|
start: string;
|
|
48
|
+
/**
|
|
49
|
+
* The first date-time after the interval, in the same format as `start`. It is exclusive: the
|
|
50
|
+
* interval holds everything from `start` up to but not including this value. It can equal
|
|
51
|
+
* `start`, which makes the interval empty.
|
|
52
|
+
*/
|
|
38
53
|
end: string;
|
|
39
54
|
}>;
|