@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,19 +1,40 @@
|
|
|
1
1
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
2
|
-
import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
2
|
+
import { isInDaylightTime, zonedDateTimeFrom } from "../../internal/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* Check whether a zoned value's instant falls within daylight saving time.
|
|
5
5
|
*
|
|
6
|
-
* - The
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
6
|
+
* - The rule is GMT's own definition, not the tz database's daylight flag. No JavaScript API
|
|
7
|
+
* exposes that flag, and it cannot be worked out from offsets.
|
|
8
|
+
* - The rule: daylight time runs from a forward change of the zone's clocks to the backward
|
|
9
|
+
* change that undoes it. A backward change undoes the most recent forward change of the same
|
|
10
|
+
* size not yet undone, if it comes less than 365 days after it. The instant is in daylight
|
|
11
|
+
* time when it is at or after such a forward change and before its backward change.
|
|
12
|
+
* - Read from the zone's offset changes in the runtime's time zone data
|
|
13
|
+
* (`getTimeZoneTransition`); GMT holds no zone data. The answer changes only at a clock
|
|
14
|
+
* change, and the answer for a past instant can change when the runtime's data learns that a
|
|
15
|
+
* zone stopped changing its clocks.
|
|
16
|
+
* - A forward change never undone, or undone 365 days or more later, is a change of standard
|
|
17
|
+
* time: `Europe/Istanbul` is on standard time from its last advance in March 2016.
|
|
18
|
+
* - The higher of two alternating offsets is the daylight one, as in the tz database's rearguard
|
|
19
|
+
* form. Its main form reverses `Europe/Dublin` (winter is its daylight time, a negative save)
|
|
20
|
+
* and `Africa/Casablanca` (the Ramadan weeks are); here Dublin's summer and Casablanca's
|
|
21
|
+
* months at `+01:00` are daylight time.
|
|
22
|
+
* - Read as standard time, because the offsets do not show otherwise:
|
|
23
|
+
* - the last summer before a zone kept its daylight offset for good (the tz database dates
|
|
24
|
+
* Istanbul's switch 2016-09-07, with no clock change);
|
|
25
|
+
* - a daylight period held 365 days or longer (`America/Santiago` 2014 to 2016);
|
|
26
|
+
* - a daylight period that began, ended or was interrupted by a move of standard time, so the
|
|
27
|
+
* clocks went back by another amount or not at all (`America/Kentucky/Monticello` 2000), or
|
|
28
|
+
* the offset changed part-way through and the rest, or all, of the period is not paired
|
|
29
|
+
* (`Asia/Tomsk` 2002, `Asia/Jerusalem` 1948);
|
|
30
|
+
* - a daylight period whose end is past the last instant Temporal can represent.
|
|
31
|
+
* - Read as daylight time: a move of standard time reversed by the same amount less than 365
|
|
32
|
+
* days later (`America/Metlakatla` 2018 to 2019).
|
|
33
|
+
* - The other DST functions answer other questions: `hasDaylightSaving(timeZone, { at })` whether
|
|
34
|
+
* a zone observes DST at an instant, `getDstTransitions(timeZone, year)` where its offset
|
|
35
|
+
* changes fall, and `classifyLocal` whether a wall time is ambiguous. See
|
|
36
|
+
* docs/dst-disambiguation.md.
|
|
37
|
+
* - Returns false for invalid input, and for a zone with a fixed offset.
|
|
17
38
|
*
|
|
18
39
|
* @param value zoned ISO 8601 datetime string
|
|
19
40
|
* @returns true if the instant is in daylight saving time, false otherwise or on invalid input
|
|
@@ -22,6 +43,12 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
|
22
43
|
* @example isInDaylightSaving("2024-01-15T12:00:00-05:00[America/New_York]") // false
|
|
23
44
|
* @example isInDaylightSaving("2024-01-15T12:00:00+11:00[Australia/Sydney]") // true (southern-hemisphere summer)
|
|
24
45
|
* @example isInDaylightSaving("2024-07-15T12:00:00+09:00[Asia/Tokyo]") // false (Asia/Tokyo has no DST)
|
|
46
|
+
* @example isInDaylightSaving("2015-07-01T12:00:00+03:00[Europe/Istanbul]") // true (undone 2015-11-08)
|
|
47
|
+
* @example isInDaylightSaving("2016-07-01T12:00:00+03:00[Europe/Istanbul]") // false (the March 2016 advance was never undone)
|
|
48
|
+
* @example isInDaylightSaving("2016-12-01T12:00:00+03:00[Europe/Istanbul]") // false (permanent +03:00)
|
|
49
|
+
* @example isInDaylightSaving("2019-07-15T12:00:00+01:00[Europe/Dublin]") // true
|
|
50
|
+
* @example isInDaylightSaving("2019-12-01T12:00:00+01:00[Africa/Casablanca]") // true (put back 2020-04-19)
|
|
51
|
+
* @example isInDaylightSaving("2019-07-15T12:00:00+00:00[UTC]") // false
|
|
25
52
|
* @example isInDaylightSaving("invalid") // false
|
|
26
53
|
*/
|
|
27
54
|
export function isInDaylightSaving(value) {
|
|
@@ -29,38 +56,7 @@ export function isInDaylightSaving(value) {
|
|
|
29
56
|
return false;
|
|
30
57
|
}
|
|
31
58
|
try {
|
|
32
|
-
|
|
33
|
-
const { timeZoneId: timeZone, year } = zonedDateTime;
|
|
34
|
-
// Sample the zone's offset 6 months apart, within the same calendar year
|
|
35
|
-
// as `value` (a zone's DST rules can change between years). DST always
|
|
36
|
-
// shifts a zone's clocks forward relative to its own standard time, in
|
|
37
|
-
// every hemisphere, so whichever of these two offsets is smaller is
|
|
38
|
-
// "standard" — regardless of whether the zone's DST season falls in the
|
|
39
|
-
// Jan or Jul half of the year. This mirrors `hasDaylightSaving`'s
|
|
40
|
-
// Jan/Jul sampling, but anchored to `value`'s own year rather than a
|
|
41
|
-
// fixed reference year, and doesn't attempt to detect a zone whose
|
|
42
|
-
// standard offset itself changed permanently mid-year (rare, and H3
|
|
43
|
-
// shares the same limitation).
|
|
44
|
-
const januaryOffsetNanoseconds = zonedDateTimeFrom({
|
|
45
|
-
year,
|
|
46
|
-
month: 1,
|
|
47
|
-
day: 15,
|
|
48
|
-
hour: 12,
|
|
49
|
-
minute: 0,
|
|
50
|
-
second: 0,
|
|
51
|
-
timeZone,
|
|
52
|
-
}).offsetNanoseconds;
|
|
53
|
-
const julyOffsetNanoseconds = zonedDateTimeFrom({
|
|
54
|
-
year,
|
|
55
|
-
month: 7,
|
|
56
|
-
day: 15,
|
|
57
|
-
hour: 12,
|
|
58
|
-
minute: 0,
|
|
59
|
-
second: 0,
|
|
60
|
-
timeZone,
|
|
61
|
-
}).offsetNanoseconds;
|
|
62
|
-
const standardOffsetNanoseconds = Math.min(januaryOffsetNanoseconds, julyOffsetNanoseconds);
|
|
63
|
-
return zonedDateTime.offsetNanoseconds > standardOffsetNanoseconds;
|
|
59
|
+
return isInDaylightTime(zonedDateTimeFrom(value));
|
|
64
60
|
}
|
|
65
61
|
catch {
|
|
66
62
|
return false;
|
|
@@ -4,17 +4,15 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
4
4
|
* Attach the specified `timeZone` to a plain datetime string and return a zoned ISO 8601 datetime string.
|
|
5
5
|
*
|
|
6
6
|
* - Combines plain datetime with timezone to create ZonedDateTime.
|
|
7
|
-
* - `disambiguation` controls DST gap/overlap resolution: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
|
|
8
7
|
* - There is no `offset` option (removed in 1.16.0): Temporal `PlainDateTime#toZonedDateTime` reads
|
|
9
8
|
* only `disambiguation`, and a plain datetime has no UTC offset for `offset` to act on.
|
|
10
|
-
* - **Output is cut to milliseconds by default
|
|
11
|
-
* (Temporal `toString` rounding mode `"trunc"`), so microseconds and nanoseconds in `value` are
|
|
9
|
+
* - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
|
|
12
10
|
* dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
|
|
13
11
|
* - Returns "" for invalid input.
|
|
14
12
|
*
|
|
15
13
|
* @param value plain datetime string (e.g. "2024-02-29T14:30:45")
|
|
16
|
-
* @param timeZone IANA
|
|
17
|
-
* @param optionsArg optional
|
|
14
|
+
* @param timeZone IANA name or UTC offset
|
|
15
|
+
* @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
|
|
18
16
|
* @returns zoned ISO 8601 datetime string or "" when invalid
|
|
19
17
|
*
|
|
20
18
|
* @example convertPlainDateTimeToZoned("2024-02-29T14:30:45", "America/New_York") // "2024-02-29T14:30:45.000-05:00[America/New_York]"
|
|
@@ -26,6 +24,21 @@ import type { Disambiguation } from "../../types/index.js";
|
|
|
26
24
|
* @example convertPlainDateTimeToZoned("2024-03-10T02:30:00", "America/New_York", { disambiguation: "reject" }) // ""
|
|
27
25
|
*/
|
|
28
26
|
export declare function convertPlainDateTimeToZoned(value: string, timeZone: string, optionsArg?: {
|
|
27
|
+
/**
|
|
28
|
+
* The smallest unit written in the output string, from `"minute"` to `"nanosecond"`, singular
|
|
29
|
+
* or plural. Anything smaller is truncated, as Temporal's `toString` does with its `"trunc"`
|
|
30
|
+
* rounding mode.
|
|
31
|
+
*
|
|
32
|
+
* @defaultValue `"milliseconds"`
|
|
33
|
+
*/
|
|
29
34
|
smallestUnit?: Temporal.ZonedDateTimeToStringOptions["smallestUnit"];
|
|
35
|
+
/**
|
|
36
|
+
* How `value` resolves when its wall-clock time falls in a DST gap or overlap in `timeZone`. In
|
|
37
|
+
* a fall-back overlap `"compatible"` and `"earlier"` take the earlier instant and `"later"` the
|
|
38
|
+
* later one; in a spring-forward gap `"compatible"` and `"later"` move the wall clock forward
|
|
39
|
+
* by the gap length and `"earlier"` back by it. `"reject"` returns `""` for both.
|
|
40
|
+
*
|
|
41
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
42
|
+
*/
|
|
30
43
|
disambiguation?: Disambiguation;
|
|
31
44
|
}): string;
|
|
@@ -3,21 +3,20 @@ import { isValidDateTime } from "../../plain/validate/index.js";
|
|
|
3
3
|
import { isValidTimeZone } from "../validate/index.js";
|
|
4
4
|
import { isoStringBody, zonedDateTimeFrom } from "../../internal/index.js";
|
|
5
5
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
6
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
6
7
|
/**
|
|
7
8
|
* Attach the specified `timeZone` to a plain datetime string and return a zoned ISO 8601 datetime string.
|
|
8
9
|
*
|
|
9
10
|
* - Combines plain datetime with timezone to create ZonedDateTime.
|
|
10
|
-
* - `disambiguation` controls DST gap/overlap resolution: "compatible" (default, matches Temporal's default), "earlier", "later", or "reject" (throws, resulting in "").
|
|
11
11
|
* - There is no `offset` option (removed in 1.16.0): Temporal `PlainDateTime#toZonedDateTime` reads
|
|
12
12
|
* only `disambiguation`, and a plain datetime has no UTC offset for `offset` to act on.
|
|
13
|
-
* - **Output is cut to milliseconds by default
|
|
14
|
-
* (Temporal `toString` rounding mode `"trunc"`), so microseconds and nanoseconds in `value` are
|
|
13
|
+
* - **Output is cut to milliseconds by default**, so microseconds and nanoseconds in `value` are
|
|
15
14
|
* dropped. Pass `{ smallestUnit: "nanoseconds" }` to keep every digit.
|
|
16
15
|
* - Returns "" for invalid input.
|
|
17
16
|
*
|
|
18
17
|
* @param value plain datetime string (e.g. "2024-02-29T14:30:45")
|
|
19
|
-
* @param timeZone IANA
|
|
20
|
-
* @param optionsArg optional
|
|
18
|
+
* @param timeZone IANA name or UTC offset
|
|
19
|
+
* @param optionsArg optional settings for the precision of the output string and for resolving a DST gap or overlap
|
|
21
20
|
* @returns zoned ISO 8601 datetime string or "" when invalid
|
|
22
21
|
*
|
|
23
22
|
* @example convertPlainDateTimeToZoned("2024-02-29T14:30:45", "America/New_York") // "2024-02-29T14:30:45.000-05:00[America/New_York]"
|
|
@@ -36,13 +35,9 @@ export function convertPlainDateTimeToZoned(value, timeZone, optionsArg) {
|
|
|
36
35
|
if (!isValidDateTime(value) || !isValidTimeZone(timeZone)) {
|
|
37
36
|
return "";
|
|
38
37
|
}
|
|
39
|
-
const disambiguation = optionsArg?.disambiguation
|
|
40
|
-
? "compatible"
|
|
41
|
-
: optionsArg.disambiguation;
|
|
38
|
+
const disambiguation = optionOrDefault(optionsArg?.disambiguation, "compatible");
|
|
42
39
|
const options = {
|
|
43
|
-
smallestUnit: optionsArg?.smallestUnit
|
|
44
|
-
? "milliseconds"
|
|
45
|
-
: optionsArg.smallestUnit,
|
|
40
|
+
smallestUnit: optionOrDefault(optionsArg?.smallestUnit, "milliseconds"),
|
|
46
41
|
};
|
|
47
42
|
try {
|
|
48
43
|
const zonedDateTime = zonedDateTimeFrom(`${isoStringBody(value)}[${timeZone}]`, { disambiguation });
|
|
@@ -4,13 +4,11 @@ import type { UnixUnit } from "../../unix/validate/isValidUnixUnit.js";
|
|
|
4
4
|
*
|
|
5
5
|
* - Uses Temporal.ZonedDateTime.toInstant to convert.
|
|
6
6
|
* - Seconds floor toward −∞, as POSIX `time_t` counts whole elapsed seconds.
|
|
7
|
-
* - `options
|
|
8
|
-
* `"milliseconds"`. An explicit `undefined` is the same as omitted; a non-object `options` (such
|
|
9
|
-
* as a bare `"seconds"` string) returns null.
|
|
7
|
+
* - A non-object `options` (such as a bare `"seconds"` string) returns null.
|
|
10
8
|
* - Returns null for invalid input.
|
|
11
9
|
*
|
|
12
10
|
* @param value zoned ISO 8601 datetime string
|
|
13
|
-
* @param options optional
|
|
11
|
+
* @param options optional setting for the unit of the returned epoch value
|
|
14
12
|
* @returns epoch number or null on invalid
|
|
15
13
|
*
|
|
16
14
|
* @example convertZonedToUnix("2024-02-29T12:34:56.789+00:00[UTC]") // 1709210096789
|
|
@@ -19,5 +17,12 @@ import type { UnixUnit } from "../../unix/validate/isValidUnixUnit.js";
|
|
|
19
17
|
* @example convertZonedToUnix("invalid") // null
|
|
20
18
|
*/
|
|
21
19
|
export declare function convertZonedToUnix(value: string, options?: {
|
|
20
|
+
/**
|
|
21
|
+
* The unit the epoch value is returned in: `"milliseconds"` or `"seconds"`, each also accepted
|
|
22
|
+
* in its singular form. An explicit `undefined` is the same as omitted; any other value returns
|
|
23
|
+
* null.
|
|
24
|
+
*
|
|
25
|
+
* @defaultValue `"milliseconds"`
|
|
26
|
+
*/
|
|
22
27
|
epochUnit?: UnixUnit;
|
|
23
28
|
}): number | null;
|
|
@@ -6,13 +6,11 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
|
6
6
|
*
|
|
7
7
|
* - Uses Temporal.ZonedDateTime.toInstant to convert.
|
|
8
8
|
* - Seconds floor toward −∞, as POSIX `time_t` counts whole elapsed seconds.
|
|
9
|
-
* - `options
|
|
10
|
-
* `"milliseconds"`. An explicit `undefined` is the same as omitted; a non-object `options` (such
|
|
11
|
-
* as a bare `"seconds"` string) returns null.
|
|
9
|
+
* - A non-object `options` (such as a bare `"seconds"` string) returns null.
|
|
12
10
|
* - Returns null for invalid input.
|
|
13
11
|
*
|
|
14
12
|
* @param value zoned ISO 8601 datetime string
|
|
15
|
-
* @param options optional
|
|
13
|
+
* @param options optional setting for the unit of the returned epoch value
|
|
16
14
|
* @returns epoch number or null on invalid
|
|
17
15
|
*
|
|
18
16
|
* @example convertZonedToUnix("2024-02-29T12:34:56.789+00:00[UTC]") // 1709210096789
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - Returns "" for invalid input.
|
|
6
6
|
*
|
|
7
7
|
* @param value zoned ISO 8601 datetime string
|
|
8
|
-
* @param timeZone target IANA
|
|
8
|
+
* @param timeZone target IANA name or UTC offset
|
|
9
9
|
* @returns zoned ISO 8601 string in target timeZone or "" when invalid
|
|
10
10
|
*
|
|
11
11
|
* @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
|
|
@@ -7,7 +7,7 @@ import { zonedDateTimeFrom } from "../../internal/index.js";
|
|
|
7
7
|
* - Returns "" for invalid input.
|
|
8
8
|
*
|
|
9
9
|
* @param value zoned ISO 8601 datetime string
|
|
10
|
-
* @param timeZone target IANA
|
|
10
|
+
* @param timeZone target IANA name or UTC offset
|
|
11
11
|
* @returns zoned ISO 8601 string in target timeZone or "" when invalid
|
|
12
12
|
*
|
|
13
13
|
* @example convertZonedToZoned("2024-02-29T12:34:56.789+00:00[UTC]", "America/New_York") // "2024-02-29T07:34:56.789-05:00[America/New_York]"
|
|
@@ -1,19 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for `formatCalendarZoned`: the moment the day label is measured from and the length of
|
|
3
|
+
* the time-of-day half.
|
|
4
|
+
*/
|
|
1
5
|
export interface FormatCalendarZonedOptions {
|
|
2
6
|
/**
|
|
3
|
-
*
|
|
7
|
+
* The instant the day label is measured from, as a zoned ISO string, a UTC ISO string or a
|
|
8
|
+
* numeric epoch in milliseconds. Whatever its form, it is converted into `value`'s own time zone
|
|
9
|
+
* before calendar days are compared, because a day label needs one zone's wall clock and
|
|
10
|
+
* `value`'s zone is whose "today" is being described. Any other value returns `""`.
|
|
4
11
|
*
|
|
5
|
-
*
|
|
6
|
-
* comparing calendar days. Unlike `formatRelativeZoned`'s `reference`
|
|
7
|
-
* (which keeps a ZonedDateTime reference in its own zone for
|
|
8
|
-
* elapsed-time diffing), a calendar *label* is meaningless without
|
|
9
|
-
* picking one zone's wall clock — `value`'s zone is the natural choice,
|
|
10
|
-
* since that is whose "today" is being described.
|
|
11
|
-
* - UTC ISO string or numeric epoch (ms): placed into `value`'s timezone.
|
|
12
|
-
* - Omitted: "now" in `value`'s own timezone.
|
|
12
|
+
* @defaultValue The current instant, read in `value`'s time zone.
|
|
13
13
|
*/
|
|
14
14
|
reference?: string | number;
|
|
15
|
-
/**
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* The length of the time-of-day part, as the `timeStyle` of `Intl.DateTimeFormat`. `"short"`
|
|
17
|
+
* writes hours and minutes, `"medium"` adds seconds, `"long"` adds the short time zone name
|
|
18
|
+
* ("EDT") and `"full"` the long one ("Eastern Daylight Time"). Any other value returns `""`.
|
|
19
|
+
*
|
|
20
|
+
* @defaultValue `"short"`
|
|
21
|
+
*/
|
|
22
|
+
timeStyle?: "short" | "medium" | "long" | "full";
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
25
|
* Format a zoned date-time as a relative day label plus time-of-day, e.g.
|
|
@@ -26,7 +32,7 @@ export interface FormatCalendarZonedOptions {
|
|
|
26
32
|
*
|
|
27
33
|
* @param value ZonedDateTime ISO string to format
|
|
28
34
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
29
|
-
* @param options optional
|
|
35
|
+
* @param options optional settings for the reference moment and the time style
|
|
30
36
|
* @returns the formatted calendar string, or "" on invalid input
|
|
31
37
|
*
|
|
32
38
|
* @example formatCalendarZoned("2026-03-16T14:30:00-04:00[America/New_York]", "en-US", { reference: "2026-03-15T09:00:00-04:00[America/New_York]" }) // "tomorrow at 2:30 PM"
|
|
@@ -4,6 +4,7 @@ import { formatCalendarDays } from "../../internal/formatCalendarDays.js";
|
|
|
4
4
|
import { isValidUtc } from "../../utc/validate/index.js";
|
|
5
5
|
import { isValidZonedFormatReference } from "../../internal/zonedFormatReference.js";
|
|
6
6
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
7
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
7
8
|
/**
|
|
8
9
|
* Format a zoned date-time as a relative day label plus time-of-day, e.g.
|
|
9
10
|
* "Tomorrow at 2:30 PM" — the zoned counterpart of `formatCalendar`. See
|
|
@@ -15,7 +16,7 @@ import { isValidZonedDateTime } from "../validate/index.js";
|
|
|
15
16
|
*
|
|
16
17
|
* @param value ZonedDateTime ISO string to format
|
|
17
18
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
18
|
-
* @param options optional
|
|
19
|
+
* @param options optional settings for the reference moment and the time style
|
|
19
20
|
* @returns the formatted calendar string, or "" on invalid input
|
|
20
21
|
*
|
|
21
22
|
* @example formatCalendarZoned("2026-03-16T14:30:00-04:00[America/New_York]", "en-US", { reference: "2026-03-15T09:00:00-04:00[America/New_York]" }) // "tomorrow at 2:30 PM"
|
|
@@ -32,24 +33,27 @@ export function formatCalendarZoned(value, locale, options = {}) {
|
|
|
32
33
|
return "";
|
|
33
34
|
if (!isValidZonedDateTime(value))
|
|
34
35
|
return "";
|
|
35
|
-
|
|
36
|
+
// Each option is read once (GetOption).
|
|
37
|
+
const referenceOption = options.reference;
|
|
38
|
+
if (!isValidZonedFormatReference(referenceOption))
|
|
36
39
|
return "";
|
|
37
40
|
try {
|
|
38
41
|
const target = zonedDateTimeFrom(value);
|
|
39
42
|
const timeZone = target.timeZoneId;
|
|
40
43
|
let reference;
|
|
41
|
-
if (
|
|
44
|
+
if (referenceOption === undefined) {
|
|
42
45
|
reference = Temporal.Now.zonedDateTimeISO(timeZone);
|
|
43
46
|
}
|
|
44
|
-
else if (typeof
|
|
45
|
-
reference = isValidUtc(
|
|
46
|
-
? Temporal.Instant.from(
|
|
47
|
-
: zonedDateTimeFrom(
|
|
47
|
+
else if (typeof referenceOption === "string") {
|
|
48
|
+
reference = isValidUtc(referenceOption)
|
|
49
|
+
? Temporal.Instant.from(referenceOption).toZonedDateTimeISO(timeZone)
|
|
50
|
+
: zonedDateTimeFrom(referenceOption).withTimeZone(timeZone);
|
|
48
51
|
}
|
|
49
52
|
else {
|
|
50
|
-
reference =
|
|
53
|
+
reference =
|
|
54
|
+
Temporal.Instant.fromEpochMilliseconds(referenceOption).toZonedDateTimeISO(timeZone);
|
|
51
55
|
}
|
|
52
|
-
return formatCalendarDays(target.toPlainDate().since(reference.toPlainDate()).days, target.epochMilliseconds, timeZone, locale, options.timeStyle
|
|
56
|
+
return formatCalendarDays(target.toPlainDate().since(reference.toPlainDate()).days, target.epochMilliseconds, timeZone, locale, optionOrDefault(options.timeStyle, "short"));
|
|
53
57
|
}
|
|
54
58
|
catch {
|
|
55
59
|
return "";
|
|
@@ -1,20 +1,48 @@
|
|
|
1
1
|
import type { RelativeRoundingMethod, RelativeUnit } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for `formatRelativeZoned`: how the phrase is worded, the unit it counts in, how the
|
|
4
|
+
* count rounds and the moment the distance is measured from.
|
|
5
|
+
*/
|
|
2
6
|
export interface FormatRelativeZonedOptions {
|
|
7
|
+
/**
|
|
8
|
+
* The length of the unit name, as the `style` of `Intl.RelativeTimeFormat`: `"long"` ("in 3
|
|
9
|
+
* months"), `"short"` ("in 3 mo.") or `"narrow"` (the locale's most compact form).
|
|
10
|
+
*
|
|
11
|
+
* @defaultValue `"long"`
|
|
12
|
+
*/
|
|
3
13
|
style?: "long" | "short" | "narrow";
|
|
14
|
+
/**
|
|
15
|
+
* Whether a distance may be written as a word instead of a number, as the `numeric` option of
|
|
16
|
+
* `Intl.RelativeTimeFormat`. `"auto"` uses the locale's word where it has one ("yesterday", "next
|
|
17
|
+
* year"); `"always"` writes the number every time ("1 day ago").
|
|
18
|
+
*
|
|
19
|
+
* @defaultValue `"auto"`
|
|
20
|
+
*/
|
|
4
21
|
numeric?: "always" | "auto";
|
|
5
|
-
|
|
22
|
+
/**
|
|
23
|
+
* The unit the distance is written in, whatever its size: `"second"`, `"minute"`, `"hour"`,
|
|
24
|
+
* `"day"`, `"week"`, `"month"` or `"year"`, singular or plural. Any other value returns `""`.
|
|
25
|
+
* Omitted, the unit is picked from the distance: second under a minute, minute under an hour,
|
|
26
|
+
* hour under a day, day under 7 days, week under 28, month under 365 and year beyond.
|
|
27
|
+
*
|
|
28
|
+
* @defaultValue None. The unit is picked from the distance.
|
|
29
|
+
*/
|
|
30
|
+
largestUnit?: RelativeUnit | `${RelativeUnit}s`;
|
|
31
|
+
/**
|
|
32
|
+
* The way a fractional distance becomes the whole number displayed: `"round"` goes to the nearest
|
|
33
|
+
* whole number, `"floor"` down and `"ceil"` up. It applies to the signed value, where a past
|
|
34
|
+
* distance is negative, so `"floor"` turns −1.5 hours into "2 hours ago".
|
|
35
|
+
*
|
|
36
|
+
* @defaultValue `"round"`
|
|
37
|
+
*/
|
|
6
38
|
roundingMethod?: RelativeRoundingMethod;
|
|
7
39
|
/**
|
|
8
|
-
*
|
|
40
|
+
* The instant the distance is measured from, as a zoned ISO string, a UTC ISO string or a numeric
|
|
41
|
+
* epoch in milliseconds. The distance is the exact time between the two instants; the reference's
|
|
42
|
+
* time zone only anchors how months and years are counted, which is its own zone for a zoned
|
|
43
|
+
* string and `value`'s zone for a UTC string or an epoch. Any other value returns `""`.
|
|
9
44
|
*
|
|
10
|
-
*
|
|
11
|
-
* cross-zone diffs correctly. The label is therefore zone-aware — a value
|
|
12
|
-
* and reference in different zones can produce a non-zero diff even when
|
|
13
|
-
* they describe the same absolute instant.
|
|
14
|
-
* - UTC ISO string: placed into `value`'s timezone before diffing so the
|
|
15
|
-
* calendar anchor matches the value's wall clock.
|
|
16
|
-
* - Numeric epoch (ms): same — placed into `value`'s timezone.
|
|
17
|
-
* - Omitted: "now" in `value`'s own timezone.
|
|
45
|
+
* @defaultValue The current instant, read in `value`'s time zone.
|
|
18
46
|
*/
|
|
19
47
|
reference?: string | number;
|
|
20
48
|
}
|
|
@@ -27,13 +55,14 @@ export interface FormatRelativeZonedOptions {
|
|
|
27
55
|
* "3 years ago".
|
|
28
56
|
* - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
|
|
29
57
|
* Pass `largestUnit: "day"` to keep a day count.
|
|
30
|
-
* - `
|
|
58
|
+
* - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
|
|
59
|
+
* other value returns `""`.
|
|
31
60
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
32
61
|
* Temporal's GetOptionsObject rejects it.
|
|
33
62
|
*
|
|
34
63
|
* @param value ZonedDateTime ISO string to format
|
|
35
64
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
36
|
-
* @param options optional
|
|
65
|
+
* @param options optional settings for the wording, the display unit, rounding and the reference moment
|
|
37
66
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
38
67
|
*
|
|
39
68
|
* @example formatRelativeZoned("2023-12-29T00:00:00+00:00[UTC]", "en-US", { reference: "2024-02-29T00:00:00+00:00[UTC]" }) // "2 months ago"
|
|
@@ -13,13 +13,14 @@ import { isValidZonedDateTime } from "../validate/index.js";
|
|
|
13
13
|
* "3 years ago".
|
|
14
14
|
* - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
|
|
15
15
|
* Pass `largestUnit: "day"` to keep a day count.
|
|
16
|
-
* - `
|
|
16
|
+
* - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
|
|
17
|
+
* other value returns `""`.
|
|
17
18
|
* - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
|
|
18
19
|
* Temporal's GetOptionsObject rejects it.
|
|
19
20
|
*
|
|
20
21
|
* @param value ZonedDateTime ISO string to format
|
|
21
22
|
* @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
|
|
22
|
-
* @param options optional
|
|
23
|
+
* @param options optional settings for the wording, the display unit, rounding and the reference moment
|
|
23
24
|
* @returns the formatted relative-time string, or "" on invalid input
|
|
24
25
|
*
|
|
25
26
|
* @example formatRelativeZoned("2023-12-29T00:00:00+00:00[UTC]", "en-US", { reference: "2024-02-29T00:00:00+00:00[UTC]" }) // "2 months ago"
|
|
@@ -37,12 +38,14 @@ export function formatRelativeZoned(value, locale, options = {}) {
|
|
|
37
38
|
return "";
|
|
38
39
|
if (!isValidZonedDateTime(value))
|
|
39
40
|
return "";
|
|
40
|
-
|
|
41
|
+
// Each option is read once (GetOption).
|
|
42
|
+
const referenceOption = options.reference;
|
|
43
|
+
if (!isValidZonedFormatReference(referenceOption))
|
|
41
44
|
return "";
|
|
42
45
|
try {
|
|
43
46
|
const valueZDT = zonedDateTimeFrom(value);
|
|
44
47
|
const valueInstant = valueZDT.toInstant();
|
|
45
|
-
const refZDT = resolveZonedReference(
|
|
48
|
+
const refZDT = resolveZonedReference(referenceOption, valueZDT.timeZoneId);
|
|
46
49
|
const diff = valueInstant.since(refZDT.toInstant());
|
|
47
50
|
// month/year are calendrical and need a relativeTo anchor
|
|
48
51
|
return formatRelativeDuration(diff, locale, options, (unit) => durationTotal(diff, unit, refZDT));
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* - **Fixed grammar, not a display format.** RFC 5322 mandates English
|
|
6
6
|
* weekday/month abbreviations and a numeric `+HHMM`/`-HHMM` offset
|
|
7
7
|
* regardless of caller locale — there is no locale-appropriate alternative
|
|
8
|
-
* ordering to lose, so this does not conflict with
|
|
9
|
-
*
|
|
8
|
+
* ordering to lose, so this does not conflict with GMT's exclusion of a
|
|
9
|
+
* general token formatter.
|
|
10
10
|
* - Uses the input's own UTC offset at that instant (DST-aware); never emits
|
|
11
11
|
* an obsolete named zone like "GMT" or "EST" on output, only numeric.
|
|
12
12
|
* - Day, hour, minute, and second are always zero-padded to 2 digits; year
|
|
@@ -9,8 +9,8 @@ const NANOSECONDS_PER_MINUTE = 60_000_000_000;
|
|
|
9
9
|
* - **Fixed grammar, not a display format.** RFC 5322 mandates English
|
|
10
10
|
* weekday/month abbreviations and a numeric `+HHMM`/`-HHMM` offset
|
|
11
11
|
* regardless of caller locale — there is no locale-appropriate alternative
|
|
12
|
-
* ordering to lose, so this does not conflict with
|
|
13
|
-
*
|
|
12
|
+
* ordering to lose, so this does not conflict with GMT's exclusion of a
|
|
13
|
+
* general token formatter.
|
|
14
14
|
* - Uses the input's own UTC offset at that instant (DST-aware); never emits
|
|
15
15
|
* an obsolete named zone like "GMT" or "EST" on output, only numeric.
|
|
16
16
|
* - Day, hour, minute, and second are always zero-padded to 2 digits; year
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
* `Temporal.ZonedDateTime.prototype.toString()` reproduces by default —
|
|
9
9
|
* that annotation is *not* valid RFC 3339. This function's only job is to
|
|
10
10
|
* strip it (`{ timeZoneName: "never" }`), which is exactly the detail a
|
|
11
|
-
* caller reaching for "give me RFC 3339" would otherwise miss. (
|
|
12
|
-
*
|
|
13
|
-
* parallel `utc`/`unix` wrapper was *not* added, because
|
|
11
|
+
* caller reaching for "give me RFC 3339" would otherwise miss. (This
|
|
12
|
+
* narrow gap is real; a parallel `utc`/`unix` wrapper was *not* added, because
|
|
14
13
|
* `Temporal.Instant.prototype.toString()` is already fully RFC 3339
|
|
15
14
|
* compliant with no bracket to strip — that would be a pure passthrough.)
|
|
16
15
|
* - **Sub-minute offsets are written in UTC.** `time-numoffset` holds whole minutes, and RFC 3339
|
|
@@ -11,9 +11,8 @@ const NANOSECONDS_PER_MINUTE = 60_000_000_000;
|
|
|
11
11
|
* `Temporal.ZonedDateTime.prototype.toString()` reproduces by default —
|
|
12
12
|
* that annotation is *not* valid RFC 3339. This function's only job is to
|
|
13
13
|
* strip it (`{ timeZoneName: "never" }`), which is exactly the detail a
|
|
14
|
-
* caller reaching for "give me RFC 3339" would otherwise miss. (
|
|
15
|
-
*
|
|
16
|
-
* parallel `utc`/`unix` wrapper was *not* added, because
|
|
14
|
+
* caller reaching for "give me RFC 3339" would otherwise miss. (This
|
|
15
|
+
* narrow gap is real; a parallel `utc`/`unix` wrapper was *not* added, because
|
|
17
16
|
* `Temporal.Instant.prototype.toString()` is already fully RFC 3339
|
|
18
17
|
* compliant with no bracket to strip — that would be a pure passthrough.)
|
|
19
18
|
* - **Sub-minute offsets are written in UTC.** `time-numoffset` holds whole minutes, and RFC 3339
|
|
@@ -18,7 +18,16 @@
|
|
|
18
18
|
* const s: TimeZoneNameStyle = "shortGeneric";
|
|
19
19
|
*/
|
|
20
20
|
export type TimeZoneNameStyle = "short" | "long" | "shortOffset" | "longOffset" | "shortGeneric" | "longGeneric";
|
|
21
|
+
/** Options for `formatTimeZoneName`: the form the zone name is written in. */
|
|
21
22
|
export interface FormatTimeZoneNameOptions {
|
|
23
|
+
/**
|
|
24
|
+
* The form of the name, one of `Intl.DateTimeFormat`'s `timeZoneName` values. `"short"` and
|
|
25
|
+
* `"long"` give the abbreviated or full name and `"shortOffset"` and `"longOffset"` the UTC
|
|
26
|
+
* offset, all four for the offset in effect now. `"shortGeneric"` and `"longGeneric"` give a name
|
|
27
|
+
* that does not change with daylight saving.
|
|
28
|
+
*
|
|
29
|
+
* @defaultValue `"long"`
|
|
30
|
+
*/
|
|
22
31
|
style?: TimeZoneNameStyle;
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
@@ -27,7 +36,7 @@ export interface FormatTimeZoneNameOptions {
|
|
|
27
36
|
* - `options.style` covers every `Intl.DateTimeFormatOptions` `timeZoneName`
|
|
28
37
|
* value: "short" (EST), "long" (Eastern Standard Time), "shortOffset"
|
|
29
38
|
* (GMT-5), "longOffset" (GMT-05:00), "shortGeneric" (ET), "longGeneric"
|
|
30
|
-
* (Eastern Time).
|
|
39
|
+
* (Eastern Time).
|
|
31
40
|
* - "short"/"long"/"shortOffset"/"longOffset" name the zone's *current*
|
|
32
41
|
* offset — for a DST-observing zone the label flips between standard and
|
|
33
42
|
* daylight names depending on when this is called, since there's no
|
|
@@ -39,9 +48,9 @@ export interface FormatTimeZoneNameOptions {
|
|
|
39
48
|
* - Output depends on runtime ICU data.
|
|
40
49
|
* - Returns "" for an invalid timeZone or locale.
|
|
41
50
|
*
|
|
42
|
-
* @param timeZone IANA
|
|
51
|
+
* @param timeZone IANA name or UTC offset
|
|
43
52
|
* @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
|
|
44
|
-
* @param options optional
|
|
53
|
+
* @param options optional setting for the form of the name
|
|
45
54
|
* @returns localized zone name, or "" on invalid input
|
|
46
55
|
*
|
|
47
56
|
* @example formatTimeZoneName("America/New_York", "en-US", { style: "shortGeneric" }) // "ET"
|
|
@@ -2,13 +2,14 @@ import { Temporal } from "@js-temporal/polyfill";
|
|
|
2
2
|
import { resolveRequiredLocale } from "../../internal/resolveLocale.js";
|
|
3
3
|
import { isValidTimeZone } from "../validate/index.js";
|
|
4
4
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
5
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
5
6
|
/**
|
|
6
7
|
* Return the localized display name for an IANA timeZone.
|
|
7
8
|
*
|
|
8
9
|
* - `options.style` covers every `Intl.DateTimeFormatOptions` `timeZoneName`
|
|
9
10
|
* value: "short" (EST), "long" (Eastern Standard Time), "shortOffset"
|
|
10
11
|
* (GMT-5), "longOffset" (GMT-05:00), "shortGeneric" (ET), "longGeneric"
|
|
11
|
-
* (Eastern Time).
|
|
12
|
+
* (Eastern Time).
|
|
12
13
|
* - "short"/"long"/"shortOffset"/"longOffset" name the zone's *current*
|
|
13
14
|
* offset — for a DST-observing zone the label flips between standard and
|
|
14
15
|
* daylight names depending on when this is called, since there's no
|
|
@@ -20,9 +21,9 @@ import { isOptionsArgument } from "../../internal/isObject.js";
|
|
|
20
21
|
* - Output depends on runtime ICU data.
|
|
21
22
|
* - Returns "" for an invalid timeZone or locale.
|
|
22
23
|
*
|
|
23
|
-
* @param timeZone IANA
|
|
24
|
+
* @param timeZone IANA name or UTC offset
|
|
24
25
|
* @param locale BCP 47 locale tag (e.g. "en-US"), or a preference list of tags (ECMA-402; the first with locale data is read). Required: omitted, or an empty list (which ECMA-402 would resolve to the host default), returns ""
|
|
25
|
-
* @param options optional
|
|
26
|
+
* @param options optional setting for the form of the name
|
|
26
27
|
* @returns localized zone name, or "" on invalid input
|
|
27
28
|
*
|
|
28
29
|
* @example formatTimeZoneName("America/New_York", "en-US", { style: "shortGeneric" }) // "ET"
|
|
@@ -45,7 +46,7 @@ export function formatTimeZoneName(timeZone, locale, options) {
|
|
|
45
46
|
if (resolvedLocale === null)
|
|
46
47
|
return "";
|
|
47
48
|
try {
|
|
48
|
-
const style = options?.style
|
|
49
|
+
const style = optionOrDefault(options?.style, "long");
|
|
49
50
|
const formatter = new Intl.DateTimeFormat(resolvedLocale, {
|
|
50
51
|
timeZone,
|
|
51
52
|
timeZoneName: style,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { normalizeDateTime, zonedDateTimeFrom } from "../../internal/index.js";
|
|
2
2
|
import { instantFormatOptions } from "../../internal/instantFormatOptions.js";
|
|
3
3
|
import { isValidZonedDateTime } from "../validate/index.js";
|
|
4
|
+
import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
|
|
4
5
|
/**
|
|
5
6
|
* Format a zoned ISO 8601 datetime string using the Intl.DateTimeFormat implementation.
|
|
6
7
|
*
|
|
@@ -51,7 +52,7 @@ export function formatZonedDateTime(value, locale, options) {
|
|
|
51
52
|
// (GetDateTimeFormat ~any~, ~zoned-date-time~, ~all~), so the requested
|
|
52
53
|
// fields and widths are kept.
|
|
53
54
|
const zonedDateTime = zonedDateTimeFrom(value);
|
|
54
|
-
const resolved = instantFormatOptions(options
|
|
55
|
+
const resolved = instantFormatOptions(readDateTimeFormatOptions(options), zonedDateTime.timeZoneId, "zoned-date-time");
|
|
55
56
|
if (resolved === null) {
|
|
56
57
|
return "";
|
|
57
58
|
}
|