@northguild/gmt 1.16.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +742 -21
- package/dist/calendar/calculate/bucketRange.d.ts +3 -3
- package/dist/calendar/calculate/bucketRange.js +6 -6
- package/dist/calendar/calculate/floorToZone.d.ts +5 -3
- package/dist/calendar/calculate/floorToZone.js +6 -5
- package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
- package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
- package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
- package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
- package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
- package/dist/calendar/calculate/getOrdinalDate.js +2 -3
- package/dist/calendar/calculate/getQuarter.d.ts +21 -9
- package/dist/calendar/calculate/getQuarter.js +8 -12
- package/dist/calendar/hours/addOperatingTime.d.ts +53 -0
- package/dist/calendar/hours/addOperatingTime.js +59 -0
- package/dist/calendar/hours/index.d.ts +7 -0
- package/dist/calendar/hours/index.js +7 -0
- package/dist/calendar/hours/isOpenAt.d.ts +39 -0
- package/dist/calendar/hours/isOpenAt.js +44 -0
- package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
- package/dist/calendar/hours/nextCloseAt.js +51 -0
- package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
- package/dist/calendar/hours/nextOpenAt.js +47 -0
- package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
- package/dist/calendar/hours/operatingIntervals.js +52 -0
- package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
- package/dist/calendar/hours/operatingTimeBetween.js +49 -0
- package/dist/calendar/hours/recurringWindows.d.ts +61 -0
- package/dist/calendar/hours/recurringWindows.js +80 -0
- package/dist/calendar/index.d.ts +1 -0
- package/dist/calendar/index.js +1 -0
- package/dist/duration/calculate/durationAs.d.ts +13 -8
- package/dist/duration/calculate/durationAs.js +4 -8
- package/dist/duration/compare/compareDurations.d.ts +12 -6
- package/dist/duration/compare/compareDurations.js +3 -6
- package/dist/duration/format/formatDuration.d.ts +16 -4
- package/dist/duration/format/formatDuration.js +4 -5
- package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
- package/dist/duration/normalize/normalizeDuration.js +6 -15
- package/dist/duration/parse/parseDuration.d.ts +21 -3
- package/dist/duration/parse/parseDuration.js +1 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/instant/convert/classifyLocal.d.ts +1 -1
- package/dist/instant/convert/classifyLocal.js +1 -1
- package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
- package/dist/instant/convert/fromOffsetInstant.js +6 -12
- package/dist/instant/convert/resolveLocal.d.ts +12 -7
- package/dist/instant/convert/resolveLocal.js +6 -10
- package/dist/instant/convert/toOffsetInstant.d.ts +37 -1
- package/dist/instant/convert/toOffsetInstant.js +12 -28
- package/dist/intermodal/calculate/billingTimeline.d.ts +114 -0
- package/dist/intermodal/calculate/billingTimeline.js +168 -0
- package/dist/intermodal/calculate/chargeableDays.d.ts +100 -0
- package/dist/intermodal/calculate/chargeableDays.js +96 -0
- package/dist/intermodal/calculate/demurrageClock.d.ts +102 -0
- package/dist/intermodal/calculate/demurrageClock.js +140 -0
- package/dist/intermodal/calculate/freeTimeExpiry.d.ts +67 -0
- package/dist/intermodal/calculate/freeTimeExpiry.js +82 -0
- package/dist/intermodal/calculate/index.d.ts +4 -0
- package/dist/intermodal/calculate/index.js +4 -0
- package/dist/intermodal/index.d.ts +2 -0
- package/dist/intermodal/index.js +3 -0
- package/dist/internal/businessCalendar.d.ts +5 -0
- package/dist/internal/businessCalendar.js +5 -1
- package/dist/internal/cycleFieldValue.d.ts +6 -4
- package/dist/internal/cycleFieldValue.js +6 -4
- package/dist/internal/daylightTime.d.ts +33 -0
- package/dist/internal/daylightTime.js +164 -0
- package/dist/internal/durationUntilString.js +4 -3
- package/dist/internal/englishCalendarNames.js +1 -2
- package/dist/internal/epochNanoseconds.d.ts +2 -0
- package/dist/internal/epochNanoseconds.js +2 -0
- package/dist/internal/exactDuration.d.ts +37 -0
- package/dist/internal/exactDuration.js +64 -0
- package/dist/internal/exactMoment.d.ts +72 -0
- package/dist/internal/exactMoment.js +114 -0
- package/dist/internal/fiscalCalendar.d.ts +4 -3
- package/dist/internal/fiscalCalendar.js +4 -3
- package/dist/internal/formatCalendarDays.d.ts +2 -2
- package/dist/internal/formatRelativeDuration.d.ts +21 -1
- package/dist/internal/formatRelativeDuration.js +47 -7
- package/dist/internal/freeTimeLedger.d.ts +93 -0
- package/dist/internal/freeTimeLedger.js +262 -0
- package/dist/internal/index.d.ts +10 -3
- package/dist/internal/index.js +10 -3
- package/dist/internal/instantFormatOptions.js +2 -1
- package/dist/internal/instantNanoseconds.d.ts +75 -9
- package/dist/internal/instantNanoseconds.js +192 -11
- package/dist/internal/isoStringBody.d.ts +26 -0
- package/dist/internal/isoStringBody.js +22 -2
- package/dist/internal/joinDateTimeConnector.d.ts +1 -1
- package/dist/internal/monthGridWeekRow.d.ts +2 -1
- package/dist/internal/monthGridWeekRow.js +2 -1
- package/dist/internal/normalizeTimeZone.d.ts +2 -2
- package/dist/internal/normalizeTimeZone.js +2 -2
- package/dist/internal/operatingSchedule.d.ts +129 -0
- package/dist/internal/operatingSchedule.js +668 -0
- package/dist/internal/optionOrDefault.d.ts +18 -0
- package/dist/internal/optionOrDefault.js +20 -0
- package/dist/internal/patternToken.d.ts +2 -2
- package/dist/internal/patternToken.js +28 -13
- package/dist/internal/plainDateUntil.js +10 -6
- package/dist/internal/punctuality.d.ts +38 -0
- package/dist/internal/punctuality.js +59 -0
- package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
- package/dist/internal/readDateTimeFormatOptions.js +93 -0
- package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
- package/dist/internal/resolveDurationRelativeTo.js +11 -1
- package/dist/internal/resolveRelativeRounding.d.ts +17 -6
- package/dist/internal/resolveRelativeRounding.js +27 -7
- package/dist/internal/resolveRelativeUnit.d.ts +30 -0
- package/dist/internal/resolveRelativeUnit.js +40 -0
- package/dist/internal/splitStep.d.ts +24 -1
- package/dist/internal/splitStep.js +34 -2
- package/dist/internal/startOrEndOfZoned.js +2 -3
- package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
- package/dist/internal/temporalCompat/capabilities.js +35 -3
- package/dist/internal/temporalCompat/fieldSearch.js +1 -1
- package/dist/internal/temporalCompat/index.d.ts +1 -1
- package/dist/internal/temporalCompat/index.js +1 -1
- package/dist/internal/temporalCompat/repros.d.ts +1 -1
- package/dist/internal/temporalCompat/repros.js +157 -0
- package/dist/internal/timestampEvents.d.ts +32 -0
- package/dist/internal/timestampEvents.js +76 -0
- package/dist/internal/utcZonedDateTime.d.ts +5 -2
- package/dist/internal/utcZonedDateTime.js +8 -5
- package/dist/internal/wallClockAtOffset.d.ts +22 -0
- package/dist/internal/wallClockAtOffset.js +26 -0
- package/dist/internal/zonedBucket.js +8 -6
- package/dist/internal/zonedLocalDates.js +1 -1
- package/dist/internal/zonedTransitionSearch.d.ts +27 -0
- package/dist/internal/zonedTransitionSearch.js +218 -0
- package/dist/internal/zonedWallClock.d.ts +21 -7
- package/dist/internal/zonedWallClock.js +87 -18
- package/dist/internal/zonedWallClockDifference.js +5 -4
- package/dist/internal/zonedWallClockOperations.d.ts +26 -13
- package/dist/internal/zonedWallClockOperations.js +87 -34
- package/dist/interval/validate/isValidInterval.d.ts +6 -3
- package/dist/interval/validate/isValidInterval.js +6 -3
- package/dist/plain/calculate/addDate.d.ts +11 -8
- package/dist/plain/calculate/addDate.js +5 -8
- package/dist/plain/calculate/addDateTime.d.ts +7 -4
- package/dist/plain/calculate/addDateTime.js +1 -4
- package/dist/plain/calculate/cycleDate.d.ts +16 -7
- package/dist/plain/calculate/cycleDate.js +3 -7
- package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
- package/dist/plain/calculate/cycleDateTime.js +1 -4
- package/dist/plain/calculate/cycleTime.d.ts +10 -5
- package/dist/plain/calculate/cycleTime.js +3 -5
- package/dist/plain/calculate/diffDate.d.ts +1 -1
- package/dist/plain/calculate/diffDate.js +1 -1
- package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateAsDuration.js +1 -1
- package/dist/plain/calculate/diffDateTime.d.ts +1 -1
- package/dist/plain/calculate/diffDateTime.js +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
- package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
- package/dist/plain/calculate/diffTime.d.ts +1 -1
- package/dist/plain/calculate/diffTime.js +1 -1
- package/dist/plain/calculate/endOfDate.d.ts +8 -3
- package/dist/plain/calculate/endOfDate.js +1 -3
- package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
- package/dist/plain/calculate/endOfDateTime.js +1 -5
- package/dist/plain/calculate/endOfTime.d.ts +8 -2
- package/dist/plain/calculate/endOfTime.js +1 -2
- package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
- package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
- package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
- package/dist/plain/calculate/getWeekOfMonth.js +7 -4
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
- package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
- package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
- package/dist/plain/calculate/getWeeksInMonth.js +5 -2
- package/dist/plain/calculate/nextWeekday.d.ts +7 -3
- package/dist/plain/calculate/nextWeekday.js +1 -3
- package/dist/plain/calculate/previousWeekday.d.ts +7 -3
- package/dist/plain/calculate/previousWeekday.js +1 -3
- package/dist/plain/calculate/roundDate.d.ts +20 -7
- package/dist/plain/calculate/roundDate.js +3 -10
- package/dist/plain/calculate/roundDateTime.d.ts +22 -8
- package/dist/plain/calculate/roundDateTime.js +3 -11
- package/dist/plain/calculate/roundTime.d.ts +20 -4
- package/dist/plain/calculate/roundTime.js +3 -7
- package/dist/plain/calculate/setDate.d.ts +7 -5
- package/dist/plain/calculate/setDate.js +1 -5
- package/dist/plain/calculate/setDateTime.d.ts +8 -5
- package/dist/plain/calculate/setDateTime.js +1 -5
- package/dist/plain/calculate/setTime.d.ts +10 -6
- package/dist/plain/calculate/setTime.js +4 -6
- package/dist/plain/calculate/startOfDate.d.ts +8 -2
- package/dist/plain/calculate/startOfDate.js +1 -2
- package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
- package/dist/plain/calculate/startOfDateTime.js +1 -2
- package/dist/plain/calculate/startOfTime.d.ts +8 -1
- package/dist/plain/calculate/startOfTime.js +1 -1
- package/dist/plain/calculate/subtractDate.d.ts +7 -4
- package/dist/plain/calculate/subtractDate.js +1 -4
- package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
- package/dist/plain/calculate/subtractDateTime.js +1 -4
- package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
- package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
- package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
- package/dist/plain/compare/areDatesEqualBy.js +8 -6
- package/dist/plain/compare/isBetweenDate.d.ts +13 -2
- package/dist/plain/compare/isBetweenDate.js +4 -4
- package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenDateTime.js +4 -4
- package/dist/plain/compare/isBetweenTime.d.ts +13 -2
- package/dist/plain/compare/isBetweenTime.js +4 -4
- package/dist/plain/compare/isRelativeDay.d.ts +1 -1
- package/dist/plain/compare/isRelativeDay.js +1 -1
- package/dist/plain/compare/isThisUnit.d.ts +1 -1
- package/dist/plain/compare/isThisUnit.js +1 -1
- package/dist/plain/format/formatCalendar.d.ts +21 -14
- package/dist/plain/format/formatCalendar.js +21 -16
- package/dist/plain/format/formatDate.js +5 -3
- package/dist/plain/format/formatDateRange.js +4 -2
- package/dist/plain/format/formatDateTime.js +4 -2
- package/dist/plain/format/formatDateTimeRange.js +4 -2
- package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
- package/dist/plain/format/formatDateTimeToParts.js +10 -6
- package/dist/plain/format/formatDateToParts.d.ts +13 -2
- package/dist/plain/format/formatDateToParts.js +8 -4
- package/dist/plain/format/formatRelativeDate.d.ts +16 -3
- package/dist/plain/format/formatRelativeDate.js +26 -15
- package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeDateTime.js +8 -5
- package/dist/plain/format/formatRelativeTime.d.ts +16 -3
- package/dist/plain/format/formatRelativeTime.js +21 -13
- package/dist/plain/format/formatTime.js +4 -2
- package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
- package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
- package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
- package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
- package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDate.js +1 -3
- package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
- package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
- package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
- package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDate.js +2 -0
- package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
- package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
- package/dist/plain/interval/intervalSplitAtTime.js +2 -0
- package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
- package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorDate.d.ts +9 -0
- package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
- package/dist/plain/interval/intervalXorTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
- package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
- package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
- package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
- package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
- package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
- package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
- package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
- package/dist/plain/map/mapDatesInRange.d.ts +8 -4
- package/dist/plain/map/mapDatesInRange.js +1 -4
- package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseDateWithPattern.js +10 -7
- package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
- package/dist/plain/parse/parseTimeWithPattern.js +10 -7
- package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDate.js +3 -3
- package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
- package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
- package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDate.js +2 -6
- package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
- package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
- package/dist/plain/validate/isValidDateRange.d.ts +19 -4
- package/dist/plain/validate/isValidDateRange.js +1 -4
- package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidDateTimeRange.js +2 -5
- package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
- package/dist/plain/validate/isValidTimeRange.js +2 -5
- package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
- package/dist/precision/convert/fromExcelSerial.js +4 -5
- package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
- package/dist/precision/convert/fromNanoseconds.js +1 -1
- package/dist/precision/convert/toExcelSerial.d.ts +9 -3
- package/dist/precision/convert/toExcelSerial.js +3 -4
- package/dist/precision/convert/toNanoseconds.d.ts +11 -6
- package/dist/precision/convert/toNanoseconds.js +11 -6
- package/dist/precision/validate/isValidInstant.d.ts +12 -3
- package/dist/precision/validate/isValidInstant.js +12 -3
- package/dist/span/calculate/spanMs.d.ts +10 -4
- package/dist/span/calculate/spanMs.js +10 -4
- package/dist/span/calculate/spanNs.d.ts +10 -4
- package/dist/span/calculate/spanNs.js +10 -4
- package/dist/span/validate/isValidSpan.d.ts +8 -3
- package/dist/span/validate/isValidSpan.js +8 -3
- package/dist/transport/calculate/bestAvailable.d.ts +47 -0
- package/dist/transport/calculate/bestAvailable.js +76 -0
- package/dist/transport/calculate/crossingTime.d.ts +58 -0
- package/dist/transport/calculate/crossingTime.js +76 -0
- package/dist/transport/calculate/cutoffAt.d.ts +90 -0
- package/dist/transport/calculate/cutoffAt.js +209 -0
- package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
- package/dist/transport/calculate/cutoffSchedule.js +71 -0
- package/dist/transport/calculate/dwellTime.d.ts +81 -0
- package/dist/transport/calculate/dwellTime.js +130 -0
- package/dist/transport/calculate/estimateDrift.d.ts +65 -0
- package/dist/transport/calculate/estimateDrift.js +75 -0
- package/dist/transport/calculate/index.d.ts +10 -0
- package/dist/transport/calculate/index.js +10 -0
- package/dist/transport/calculate/nextDeparture.d.ts +78 -0
- package/dist/transport/calculate/nextDeparture.js +131 -0
- package/dist/transport/calculate/punctualityRate.d.ts +42 -0
- package/dist/transport/calculate/punctualityRate.js +59 -0
- package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
- package/dist/transport/calculate/scheduleDelivery.js +300 -0
- package/dist/transport/calculate/transitTime.d.ts +71 -0
- package/dist/transport/calculate/transitTime.js +101 -0
- package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
- package/dist/transport/compare/classifyPunctuality.js +64 -0
- package/dist/transport/compare/index.d.ts +4 -0
- package/dist/transport/compare/index.js +4 -0
- package/dist/transport/compare/isPastCutoff.d.ts +33 -0
- package/dist/transport/compare/isPastCutoff.js +48 -0
- package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
- package/dist/transport/compare/scheduleDeviation.js +53 -0
- package/dist/transport/compare/timeToCutoff.d.ts +31 -0
- package/dist/transport/compare/timeToCutoff.js +47 -0
- package/dist/transport/convert/etaAtZone.d.ts +43 -0
- package/dist/transport/convert/etaAtZone.js +58 -0
- package/dist/transport/convert/index.d.ts +1 -0
- package/dist/transport/convert/index.js +1 -0
- package/dist/transport/index.d.ts +4 -0
- package/dist/transport/index.js +5 -0
- package/dist/types/business-calendar.d.ts +19 -14
- package/dist/types/calendar-options.d.ts +15 -3
- package/dist/types/date-cycle-field.d.ts +5 -0
- package/dist/types/date-duration-unit.d.ts +4 -0
- package/dist/types/date-time-cycle-field.d.ts +4 -0
- package/dist/types/date-time-duration-units.d.ts +4 -0
- package/dist/types/date-time-unit.d.ts +4 -0
- package/dist/types/date-unit.d.ts +4 -0
- package/dist/types/disambiguation.d.ts +8 -0
- package/dist/types/duration-relative-to.d.ts +8 -0
- package/dist/types/duration-string-options.d.ts +28 -0
- package/dist/types/fiscal-calendar.d.ts +1 -1
- package/dist/types/fractional-digit.d.ts +5 -0
- package/dist/types/free-time-options.d.ts +44 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.js +3 -1
- package/dist/types/interval.d.ts +8 -1
- package/dist/types/offset.d.ts +9 -0
- package/dist/types/operating-schedule.d.ts +71 -0
- package/dist/types/operating-schedule.js +0 -0
- package/dist/types/overflow.d.ts +6 -0
- package/dist/types/relative-rounding-method.d.ts +6 -0
- package/dist/types/relative-time-options.d.ts +33 -5
- package/dist/types/rounding-options.d.ts +27 -0
- package/dist/types/time-cycle-field.d.ts +4 -0
- package/dist/types/time-duration-unit.d.ts +4 -0
- package/dist/types/time-unit.d.ts +4 -0
- package/dist/types/transport-timestamps.d.ts +54 -0
- package/dist/types/transport-timestamps.js +0 -0
- package/dist/unix/calculate/addUnix.d.ts +19 -5
- package/dist/unix/calculate/addUnix.js +1 -5
- package/dist/unix/calculate/diffUnix.d.ts +13 -3
- package/dist/unix/calculate/diffUnix.js +1 -3
- package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
- package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
- package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/endOfUnix.d.ts +20 -4
- package/dist/unix/calculate/endOfUnix.js +1 -4
- package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
- package/dist/unix/calculate/isBetweenUnix.js +4 -6
- package/dist/unix/calculate/roundUnix.d.ts +31 -3
- package/dist/unix/calculate/roundUnix.js +3 -6
- package/dist/unix/calculate/setUnix.d.ts +35 -9
- package/dist/unix/calculate/setUnix.js +4 -13
- package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
- package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
- package/dist/unix/calculate/startOfUnix.d.ts +20 -4
- package/dist/unix/calculate/startOfUnix.js +1 -4
- package/dist/unix/calculate/subtractUnix.d.ts +19 -5
- package/dist/unix/calculate/subtractUnix.js +1 -5
- package/dist/unix/compare/areUnixEqual.d.ts +7 -1
- package/dist/unix/compare/areUnixEqual.js +1 -1
- package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
- package/dist/unix/compare/areUnixEqualBy.js +13 -9
- package/dist/unix/compare/isAfterUnix.d.ts +7 -1
- package/dist/unix/compare/isAfterUnix.js +1 -1
- package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
- package/dist/unix/compare/isBeforeUnix.js +1 -1
- package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
- package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
- package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
- package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
- package/dist/unix/convert/convertUnixToUtc.js +3 -4
- package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
- package/dist/unix/convert/convertUnixToZoned.js +4 -5
- package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
- package/dist/unix/format/formatCalendarUnix.js +4 -5
- package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
- package/dist/unix/format/formatRelativeUnix.js +3 -5
- package/dist/unix/format/formatUnix.d.ts +24 -6
- package/dist/unix/format/formatUnix.js +8 -7
- package/dist/unix/get/getUnixNow.d.ts +8 -3
- package/dist/unix/get/getUnixNow.js +1 -3
- package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
- package/dist/unix/interval/intervalCountUnix.js +2 -5
- package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
- package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
- package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
- package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
- package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
- package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
- package/dist/unix/interval/intervalLengthUnix.js +4 -6
- package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
- package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
- package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
- package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
- package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
- package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
- package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
- package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
- package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
- package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseDateFromUnix.js +1 -2
- package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseDayFromUnix.js +2 -2
- package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
- package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
- package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseHourFromUnix.js +2 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
- package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
- package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseMonthFromUnix.js +2 -2
- package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
- package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseSecondFromUnix.js +2 -2
- package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
- package/dist/unix/parse/parseTimeFromUnix.js +1 -2
- package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
- package/dist/unix/parse/parseUnitFromUnix.js +2 -3
- package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
- package/dist/unix/parse/parseWeekFromUnix.js +3 -7
- package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
- package/dist/unix/parse/parseYearFromUnix.js +2 -2
- package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
- package/dist/unix/validate/isValidUnixRange.js +1 -4
- package/dist/utc/calculate/addUtc.d.ts +7 -4
- package/dist/utc/calculate/addUtc.js +1 -4
- package/dist/utc/calculate/diffUtc.d.ts +1 -1
- package/dist/utc/calculate/diffUtc.js +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
- package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
- package/dist/utc/calculate/endOfUtc.d.ts +16 -3
- package/dist/utc/calculate/endOfUtc.js +2 -3
- package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
- package/dist/utc/calculate/isBetweenUtc.js +4 -4
- package/dist/utc/calculate/roundUtc.d.ts +26 -9
- package/dist/utc/calculate/roundUtc.js +3 -12
- package/dist/utc/calculate/setUtc.d.ts +7 -4
- package/dist/utc/calculate/setUtc.js +1 -4
- package/dist/utc/calculate/startOfUtc.d.ts +15 -2
- package/dist/utc/calculate/startOfUtc.js +1 -2
- package/dist/utc/calculate/subtractUtc.d.ts +7 -4
- package/dist/utc/calculate/subtractUtc.js +1 -4
- package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
- package/dist/utc/compare/areUtcEqualBy.js +2 -3
- package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
- package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
- package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
- package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
- package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
- package/dist/utc/convert/convertUtcToUnix.js +3 -4
- package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
- package/dist/utc/convert/convertUtcToZoned.js +1 -1
- package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
- package/dist/utc/format/formatCalendarUtc.js +8 -6
- package/dist/utc/format/formatHttp.d.ts +1 -1
- package/dist/utc/format/formatHttp.js +1 -1
- package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
- package/dist/utc/format/formatRelativeUtc.js +9 -11
- package/dist/utc/format/formatUtc.d.ts +17 -15
- package/dist/utc/format/formatUtc.js +8 -8
- package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
- package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
- package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
- package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
- package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
- package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
- package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
- package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
- package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
- package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
- package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
- package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
- package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDateFromUtc.js +1 -3
- package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayFromUtc.js +1 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
- package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseHourFromUtc.js +1 -3
- package/dist/utc/parse/parseHttp.d.ts +1 -1
- package/dist/utc/parse/parseHttp.js +1 -1
- package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
- package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
- package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseMonthFromUtc.js +1 -3
- package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
- package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseSecondFromUtc.js +1 -3
- package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
- package/dist/utc/parse/parseTimeFromUtc.js +5 -6
- package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
- package/dist/utc/parse/parseUnitFromUtc.js +6 -8
- package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
- package/dist/utc/parse/parseWeekFromUtc.js +7 -13
- package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
- package/dist/utc/parse/parseYearFromUtc.js +1 -3
- package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
- package/dist/utc/validate/isValidUtcRange.js +2 -5
- package/dist/zoned/calculate/addZoned.d.ts +20 -10
- package/dist/zoned/calculate/addZoned.js +6 -13
- package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
- package/dist/zoned/calculate/cycleZoned.js +1 -8
- package/dist/zoned/calculate/diffZoned.d.ts +1 -1
- package/dist/zoned/calculate/diffZoned.js +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
- package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
- package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
- package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
- package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
- package/dist/zoned/calculate/endOfZoned.js +2 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
- package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
- package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
- package/dist/zoned/calculate/roundZoned.d.ts +21 -4
- package/dist/zoned/calculate/roundZoned.js +3 -7
- package/dist/zoned/calculate/setZoned.d.ts +25 -8
- package/dist/zoned/calculate/setZoned.js +4 -12
- package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
- package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
- package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
- package/dist/zoned/calculate/startOfZoned.js +1 -3
- package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
- package/dist/zoned/calculate/subtractZoned.js +6 -13
- package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
- package/dist/zoned/compare/areZonedEqualBy.js +7 -5
- package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
- package/dist/zoned/compare/isBetweenZoned.js +4 -3
- package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
- package/dist/zoned/compare/isInDaylightSaving.js +40 -44
- package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
- package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
- package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
- package/dist/zoned/convert/convertZonedToUnix.js +2 -4
- package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
- package/dist/zoned/convert/convertZonedToZoned.js +1 -1
- package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
- package/dist/zoned/format/formatCalendarZoned.js +13 -9
- package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
- package/dist/zoned/format/formatRelativeZoned.js +7 -4
- package/dist/zoned/format/formatRfc2822.d.ts +2 -2
- package/dist/zoned/format/formatRfc2822.js +2 -2
- package/dist/zoned/format/formatRfc3339.d.ts +2 -3
- package/dist/zoned/format/formatRfc3339.js +2 -3
- package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
- package/dist/zoned/format/formatTimeZoneName.js +5 -4
- package/dist/zoned/format/formatZonedDateTime.js +2 -1
- package/dist/zoned/format/formatZonedRange.js +2 -1
- package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
- package/dist/zoned/format/formatZonedToParts.js +8 -5
- package/dist/zoned/get/getDstTransitions.d.ts +9 -10
- package/dist/zoned/get/getDstTransitions.js +12 -3
- package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
- package/dist/zoned/get/getTimeZoneOffset.js +6 -3
- package/dist/zoned/get/getZonedNow.d.ts +13 -1
- package/dist/zoned/get/getZonedNow.js +12 -3
- package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
- package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
- package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
- package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
- package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
- package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
- package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
- package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
- package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
- package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
- package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
- package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
- package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
- package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
- package/dist/zoned/parse/parseRfc2822.js +1 -1
- package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
- package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
- package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
- package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
- package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
- package/dist/zoned/validate/hasDaylightSaving.js +47 -31
- package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
- package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
- package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
- package/dist/zoned/validate/isValidZonedRange.js +1 -4
- package/package.json +53 -5
- package/skills/gmt-arithmetic/SKILL.md +1 -1
- package/skills/gmt-basics/SKILL.md +10 -1
- package/skills/gmt-integration/SKILL.md +10 -5
- package/skills/gmt-timezone/SKILL.md +210 -14
- package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
- package/dist/internal/resolveReadingTimeZone.js +0 -18
- package/dist/types/duration-unit.d.ts +0 -5
- /package/dist/types/{duration-unit.js → free-time-options.js} +0 -0
|
@@ -15,8 +15,8 @@ import type { ZoneBucketUnit } from "../../types/index.js";
|
|
|
15
15
|
* - The range is half-open: an `end` landing exactly on a boundary does not open that bucket.
|
|
16
16
|
* A zero-length range mid-bucket still returns the one bucket holding it; on a boundary it
|
|
17
17
|
* returns `[]`.
|
|
18
|
-
* - Both endpoints are read in `timeZone`.
|
|
19
|
-
* `floorToZone`.
|
|
18
|
+
* - Both endpoints are read in `timeZone`. A bracketed zone they carry never supplies the
|
|
19
|
+
* zone, as in `floorToZone`.
|
|
20
20
|
* - Weeks start on Monday (ISO 8601). `unit` is the same four-unit set `floorToZone` takes,
|
|
21
21
|
* singular or plural, which `isValidZoneBucketUnit` narrows.
|
|
22
22
|
* - A local boundary that does not exist is not invented: the day Samoa deleted crossing the
|
|
@@ -33,7 +33,7 @@ import type { ZoneBucketUnit } from "../../types/index.js";
|
|
|
33
33
|
* @param start ISO 8601 instant string for the range start (inclusive)
|
|
34
34
|
* @param end ISO 8601 instant string for the range end (exclusive)
|
|
35
35
|
* @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
|
|
36
|
-
* @param timeZone IANA
|
|
36
|
+
* @param timeZone IANA name or UTC offset the buckets are computed in
|
|
37
37
|
* @returns array of UTC instant strings ending in "Z", or [] on invalid input
|
|
38
38
|
*
|
|
39
39
|
* @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Temporal } from "@js-temporal/polyfill";
|
|
2
|
-
import { nextZonedBucketStart, zonedNextTransition, zonedUnitStart, } from "../../internal/index.js";
|
|
2
|
+
import { instantFrom, nextZonedBucketStart, zonedNextTransition, zonedUnitStart, } from "../../internal/index.js";
|
|
3
3
|
import { isValidInstant } from "../../precision/validate/index.js";
|
|
4
4
|
import { isValidTimeZone } from "../../zoned/validate/index.js";
|
|
5
5
|
import { isValidZoneBucketUnit } from "../validate/index.js";
|
|
@@ -93,8 +93,8 @@ function nextBucketStartWithinRange(current, unit) {
|
|
|
93
93
|
* - The range is half-open: an `end` landing exactly on a boundary does not open that bucket.
|
|
94
94
|
* A zero-length range mid-bucket still returns the one bucket holding it; on a boundary it
|
|
95
95
|
* returns `[]`.
|
|
96
|
-
* - Both endpoints are read in `timeZone`.
|
|
97
|
-
* `floorToZone`.
|
|
96
|
+
* - Both endpoints are read in `timeZone`. A bracketed zone they carry never supplies the
|
|
97
|
+
* zone, as in `floorToZone`.
|
|
98
98
|
* - Weeks start on Monday (ISO 8601). `unit` is the same four-unit set `floorToZone` takes,
|
|
99
99
|
* singular or plural, which `isValidZoneBucketUnit` narrows.
|
|
100
100
|
* - A local boundary that does not exist is not invented: the day Samoa deleted crossing the
|
|
@@ -111,7 +111,7 @@ function nextBucketStartWithinRange(current, unit) {
|
|
|
111
111
|
* @param start ISO 8601 instant string for the range start (inclusive)
|
|
112
112
|
* @param end ISO 8601 instant string for the range end (exclusive)
|
|
113
113
|
* @param unit bucket unit ("hour" | "day" | "week" | "month", or its plural)
|
|
114
|
-
* @param timeZone IANA
|
|
114
|
+
* @param timeZone IANA name or UTC offset the buckets are computed in
|
|
115
115
|
* @returns array of UTC instant strings ending in "Z", or [] on invalid input
|
|
116
116
|
*
|
|
117
117
|
* @example bucketRange("2024-06-15T03:00:00Z", "2024-06-17T03:00:00Z", "day", "America/New_York") // ["2024-06-14T04:00:00Z", "2024-06-15T04:00:00Z", "2024-06-16T04:00:00Z"]
|
|
@@ -134,8 +134,8 @@ export function bucketRange(start, end, unit, timeZone) {
|
|
|
134
134
|
return [];
|
|
135
135
|
}
|
|
136
136
|
try {
|
|
137
|
-
const startZoned =
|
|
138
|
-
const endZoned =
|
|
137
|
+
const startZoned = instantFrom(start).toZonedDateTimeISO(timeZone);
|
|
138
|
+
const endZoned = instantFrom(end).toZonedDateTimeISO(timeZone);
|
|
139
139
|
if (Temporal.ZonedDateTime.compare(startZoned, endZoned) > 0)
|
|
140
140
|
return [];
|
|
141
141
|
if (certainlyExceedsBucketCap(startZoned, endZoned, resolvedUnit))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Temporal } from "@js-temporal/polyfill";
|
|
1
|
+
import type { Temporal } from "@js-temporal/polyfill";
|
|
2
2
|
import type { ZoneBucketUnit } from "../../types/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* Floor an instant to the start of the `unit` containing it **in `timeZone`**, and return
|
|
@@ -15,7 +15,9 @@ import type { ZoneBucketUnit } from "../../types/index.js";
|
|
|
15
15
|
* can be told apart from a bad instant.
|
|
16
16
|
* - `value` is any instant `isValidInstant` accepts — `Z`, an offset, or a bracketed zone.
|
|
17
17
|
* Only its instant is read: a bracketed zone in `value` is *not* the zone the boundary is
|
|
18
|
-
* computed in, `timeZone` is, and the two may differ freely.
|
|
18
|
+
* computed in, `timeZone` is, and the two may differ freely. An offset written to the minute
|
|
19
|
+
* that is the bracketed zone's sub-minute offset rounded (`-00:45[Africa/Monrovia]`, for
|
|
20
|
+
* −00:44:30) names the instant the zone gives, as `isValidInstant` describes.
|
|
19
21
|
* - The boundary is a real instant in the zone, so it survives the days a local boundary does
|
|
20
22
|
* not exist: a local day whose midnight is skipped by a spring-forward starts at 01:00, and
|
|
21
23
|
* a wall hour repeated by a fall-back floors to whichever pass `value` was in.
|
|
@@ -25,7 +27,7 @@ import type { ZoneBucketUnit } from "../../types/index.js";
|
|
|
25
27
|
*
|
|
26
28
|
* @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
|
|
27
29
|
* @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
|
|
28
|
-
* @param timeZone IANA
|
|
30
|
+
* @param timeZone IANA name or UTC offset the boundary is computed in
|
|
29
31
|
* @returns UTC instant string ending in "Z", or "" on invalid input
|
|
30
32
|
*
|
|
31
33
|
* @example floorToZone("2024-06-15T03:00:00Z", "day", "America/New_York") // "2024-06-14T04:00:00Z" (the 14 June local midnight — the instant is already 14 June there)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { zonedUnitStart } from "../../internal/index.js";
|
|
1
|
+
import { instantFrom, zonedUnitStart } from "../../internal/index.js";
|
|
3
2
|
import { isValidInstant } from "../../precision/validate/index.js";
|
|
4
3
|
import { isValidTimeZone } from "../../zoned/validate/index.js";
|
|
5
4
|
import { isValidZoneBucketUnit } from "../validate/index.js";
|
|
@@ -19,7 +18,9 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
|
|
|
19
18
|
* can be told apart from a bad instant.
|
|
20
19
|
* - `value` is any instant `isValidInstant` accepts — `Z`, an offset, or a bracketed zone.
|
|
21
20
|
* Only its instant is read: a bracketed zone in `value` is *not* the zone the boundary is
|
|
22
|
-
* computed in, `timeZone` is, and the two may differ freely.
|
|
21
|
+
* computed in, `timeZone` is, and the two may differ freely. An offset written to the minute
|
|
22
|
+
* that is the bracketed zone's sub-minute offset rounded (`-00:45[Africa/Monrovia]`, for
|
|
23
|
+
* −00:44:30) names the instant the zone gives, as `isValidInstant` describes.
|
|
23
24
|
* - The boundary is a real instant in the zone, so it survives the days a local boundary does
|
|
24
25
|
* not exist: a local day whose midnight is skipped by a spring-forward starts at 01:00, and
|
|
25
26
|
* a wall hour repeated by a fall-back floors to whichever pass `value` was in.
|
|
@@ -29,7 +30,7 @@ import { resolveDateTimeUnit } from "../../internal/resolveDateTimeUnit.js";
|
|
|
29
30
|
*
|
|
30
31
|
* @param value ISO 8601 instant string (e.g. "2024-06-15T03:00:00Z")
|
|
31
32
|
* @param unit boundary unit ("hour" | "day" | "week" | "month", or its plural)
|
|
32
|
-
* @param timeZone IANA
|
|
33
|
+
* @param timeZone IANA name or UTC offset the boundary is computed in
|
|
33
34
|
* @returns UTC instant string ending in "Z", or "" on invalid input
|
|
34
35
|
*
|
|
35
36
|
* @example floorToZone("2024-06-15T03:00:00Z", "day", "America/New_York") // "2024-06-14T04:00:00Z" (the 14 June local midnight — the instant is already 14 June there)
|
|
@@ -52,7 +53,7 @@ export function floorToZone(value, unit, timeZone) {
|
|
|
52
53
|
return "";
|
|
53
54
|
}
|
|
54
55
|
try {
|
|
55
|
-
const zoned =
|
|
56
|
+
const zoned = instantFrom(value).toZonedDateTimeISO(timeZone);
|
|
56
57
|
const start = zonedUnitStart(zoned, resolvedUnit);
|
|
57
58
|
return start ? start.toInstant().toString() : "";
|
|
58
59
|
}
|
|
@@ -16,11 +16,11 @@ import type { FiscalCalendar } from "../../types/index.js";
|
|
|
16
16
|
* Saturday falling exactly on January 31. Passing a published year end from a 53-week year
|
|
17
17
|
* instead (`"2024-02-03"`) states a different rule, because that date sits three days off
|
|
18
18
|
* the target the rule is centred on, and yields a different, self-consistent calendar.
|
|
19
|
-
* -
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* -
|
|
23
|
-
*
|
|
19
|
+
* - Weeks are numbered through the fiscal year as the NRF publishes them. A 53rd week is
|
|
20
|
+
* appended to period 12 — the NRF adds it "to the end of the calendar" — which makes a 4-5-4
|
|
21
|
+
* year's final quarter 4-5-5.
|
|
22
|
+
* - The `year` label follows the NRF: fiscal 2023 runs 2023-01-29 to 2024-02-03. Organisations
|
|
23
|
+
* labelling by the end year should add one.
|
|
24
24
|
* - **`year` is not a unique key for a rule anchored near 1 January.** A 52/53-week year is
|
|
25
25
|
* 364 or 371 days, so it drifts against the calendar, and no label taken from a calendar
|
|
26
26
|
* year survives that for every anchor. Under `yearEndsOn: "2022-12-31"` — the Saturday
|
|
@@ -33,9 +33,10 @@ import type { FiscalCalendar } from "../../types/index.js";
|
|
|
33
33
|
* date — which `yearEndsOn` determines, and which is yours to enumerate — not on `year`.
|
|
34
34
|
* GMT does not invent a label the inputs do not fix.
|
|
35
35
|
* - A `yearEndsOn` month-day that does not exist in a year follows Temporal's
|
|
36
|
-
* `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A
|
|
37
|
-
*
|
|
38
|
-
* leap years; this does not — state such a rule
|
|
36
|
+
* `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A rule tied
|
|
37
|
+
* to the end of a month (the weekday nearest to, or last in, the month's final days) would
|
|
38
|
+
* put a February 28 anchor on February 29 in leap years; this does not — state such a rule
|
|
39
|
+
* with a date that exists every year.
|
|
39
40
|
* - Whether a fiscal year has 52 or 53 weeks is derived from the gap between its own two
|
|
40
41
|
* ends, never assumed from a table.
|
|
41
42
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
@@ -58,7 +59,19 @@ import type { FiscalCalendar } from "../../types/index.js";
|
|
|
58
59
|
* @example getFiscalPeriod("invalid", { pattern: "4-5-4", yearEndsOn: "2026-01-31" }) // null
|
|
59
60
|
*/
|
|
60
61
|
export declare function getFiscalPeriod(value: string, calendar: FiscalCalendar): {
|
|
62
|
+
/**
|
|
63
|
+
* The calendar year the fiscal year starts in, not the year it ends in. Two consecutive fiscal
|
|
64
|
+
* years can share this label when `yearEndsOn` sits near 1 January.
|
|
65
|
+
*/
|
|
61
66
|
year: number;
|
|
67
|
+
/**
|
|
68
|
+
* The period of the fiscal year, 1 through 12. Each period is four or five weeks long as
|
|
69
|
+
* `calendar.pattern` sets, and a 53rd week belongs to period 12.
|
|
70
|
+
*/
|
|
62
71
|
period: number;
|
|
72
|
+
/**
|
|
73
|
+
* The week of the fiscal year, 1 through 52, or 53 in a year with an inserted week. Week 1 starts
|
|
74
|
+
* on the fiscal year's first day.
|
|
75
|
+
*/
|
|
63
76
|
week: number;
|
|
64
77
|
} | null;
|
|
@@ -21,11 +21,11 @@ const DAYS_PER_WEEK = 7;
|
|
|
21
21
|
* Saturday falling exactly on January 31. Passing a published year end from a 53-week year
|
|
22
22
|
* instead (`"2024-02-03"`) states a different rule, because that date sits three days off
|
|
23
23
|
* the target the rule is centred on, and yields a different, self-consistent calendar.
|
|
24
|
-
* -
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* -
|
|
28
|
-
*
|
|
24
|
+
* - Weeks are numbered through the fiscal year as the NRF publishes them. A 53rd week is
|
|
25
|
+
* appended to period 12 — the NRF adds it "to the end of the calendar" — which makes a 4-5-4
|
|
26
|
+
* year's final quarter 4-5-5.
|
|
27
|
+
* - The `year` label follows the NRF: fiscal 2023 runs 2023-01-29 to 2024-02-03. Organisations
|
|
28
|
+
* labelling by the end year should add one.
|
|
29
29
|
* - **`year` is not a unique key for a rule anchored near 1 January.** A 52/53-week year is
|
|
30
30
|
* 364 or 371 days, so it drifts against the calendar, and no label taken from a calendar
|
|
31
31
|
* year survives that for every anchor. Under `yearEndsOn: "2022-12-31"` — the Saturday
|
|
@@ -38,9 +38,10 @@ const DAYS_PER_WEEK = 7;
|
|
|
38
38
|
* date — which `yearEndsOn` determines, and which is yours to enumerate — not on `year`.
|
|
39
39
|
* GMT does not invent a label the inputs do not fix.
|
|
40
40
|
* - A `yearEndsOn` month-day that does not exist in a year follows Temporal's
|
|
41
|
-
* `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A
|
|
42
|
-
*
|
|
43
|
-
* leap years; this does not — state such a rule
|
|
41
|
+
* `overflow: "constrain"`: a February 29 rule reads February 28 in common years. A rule tied
|
|
42
|
+
* to the end of a month (the weekday nearest to, or last in, the month's final days) would
|
|
43
|
+
* put a February 28 anchor on February 29 in leap years; this does not — state such a rule
|
|
44
|
+
* with a date that exists every year.
|
|
44
45
|
* - Whether a fiscal year has 52 or 53 weeks is derived from the gap between its own two
|
|
45
46
|
* ends, never assumed from a table.
|
|
46
47
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
@@ -6,11 +6,7 @@
|
|
|
6
6
|
* end of a year, so all three fields come back together rather than as three calls a caller
|
|
7
7
|
* could combine inconsistently.
|
|
8
8
|
*
|
|
9
|
-
* -
|
|
10
|
-
* from the calendar year for late-December and early-January dates.
|
|
11
|
-
* - `week` is 1–53. ISO week 1 is the week containing the year's first Thursday, so a
|
|
12
|
-
* week-numbering year has 53 weeks roughly every five to six years.
|
|
13
|
-
* - `weekday` is 1 (Monday) through 7 (Sunday).
|
|
9
|
+
* - A week-numbering year has 53 weeks roughly every five to six years, and 52 otherwise.
|
|
14
10
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. An
|
|
15
11
|
* offset, a `Z` or a bracketed zone makes it a moment rather than a calendar date; convert
|
|
16
12
|
* it in the zone you mean first (`convertUtcToZoned` then `convertZonedToPlainDateTime`),
|
|
@@ -29,7 +25,16 @@
|
|
|
29
25
|
* @example getIsoWeekDate("invalid") // null
|
|
30
26
|
*/
|
|
31
27
|
export declare function getIsoWeekDate(value: string): {
|
|
28
|
+
/**
|
|
29
|
+
* The ISO 8601 week-numbering year: the calendar year that holds the Thursday of the date's week.
|
|
30
|
+
* It differs from the date's own calendar year for some dates in late December and early January.
|
|
31
|
+
*/
|
|
32
32
|
year: number;
|
|
33
|
+
/**
|
|
34
|
+
* The ISO 8601 week number, 1 through 53. Week 1 is the week that holds the year's first
|
|
35
|
+
* Thursday, and weeks start on Monday.
|
|
36
|
+
*/
|
|
33
37
|
week: number;
|
|
38
|
+
/** The ISO 8601 day of the week, 1 (Monday) through 7 (Sunday). */
|
|
34
39
|
weekday: number;
|
|
35
40
|
} | null;
|
|
@@ -7,11 +7,7 @@ import { zonelessCalendarDate } from "../../internal/index.js";
|
|
|
7
7
|
* end of a year, so all three fields come back together rather than as three calls a caller
|
|
8
8
|
* could combine inconsistently.
|
|
9
9
|
*
|
|
10
|
-
* -
|
|
11
|
-
* from the calendar year for late-December and early-January dates.
|
|
12
|
-
* - `week` is 1–53. ISO week 1 is the week containing the year's first Thursday, so a
|
|
13
|
-
* week-numbering year has 53 weeks roughly every five to six years.
|
|
14
|
-
* - `weekday` is 1 (Monday) through 7 (Sunday).
|
|
10
|
+
* - A week-numbering year has 53 weeks roughly every five to six years, and 52 otherwise.
|
|
15
11
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. An
|
|
16
12
|
* offset, a `Z` or a bracketed zone makes it a moment rather than a calendar date; convert
|
|
17
13
|
* it in the zone you mean first (`convertUtcToZoned` then `convertZonedToPlainDateTime`),
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return the ISO 8601 ordinal date — calendar year and day of year — for `value`.
|
|
3
3
|
*
|
|
4
|
-
* - `
|
|
5
|
-
*
|
|
6
|
-
* date never disagrees with the calendar year it is written beside.
|
|
4
|
+
* - Unlike `getIsoWeekDate`, whose year is the week-numbering year, an ordinal date never
|
|
5
|
+
* disagrees with the calendar year it is written beside.
|
|
7
6
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
8
7
|
* `getIsoWeekDate` for why a moment is not accepted here.
|
|
9
8
|
* - Returns null on invalid input.
|
|
@@ -20,6 +19,14 @@
|
|
|
20
19
|
* @example getOrdinalDate("invalid") // null
|
|
21
20
|
*/
|
|
22
21
|
export declare function getOrdinalDate(value: string): {
|
|
22
|
+
/**
|
|
23
|
+
* The calendar year of the date. It is not the ISO 8601 week-numbering year, so it always matches
|
|
24
|
+
* the year written in `value`.
|
|
25
|
+
*/
|
|
23
26
|
year: number;
|
|
27
|
+
/**
|
|
28
|
+
* The 1-based day of that year, the ISO 8601 ordinal day: 1 is January 1, and December 31 is 365,
|
|
29
|
+
* or 366 in a leap year.
|
|
30
|
+
*/
|
|
24
31
|
dayOfYear: number;
|
|
25
32
|
} | null;
|
|
@@ -2,9 +2,8 @@ import { zonelessCalendarDate } from "../../internal/index.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Return the ISO 8601 ordinal date — calendar year and day of year — for `value`.
|
|
4
4
|
*
|
|
5
|
-
* - `
|
|
6
|
-
*
|
|
7
|
-
* date never disagrees with the calendar year it is written beside.
|
|
5
|
+
* - Unlike `getIsoWeekDate`, whose year is the week-numbering year, an ordinal date never
|
|
6
|
+
* disagrees with the calendar year it is written beside.
|
|
8
7
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
9
8
|
* `getIsoWeekDate` for why a moment is not accepted here.
|
|
10
9
|
* - Returns null on invalid input.
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Return the quarter `value` falls in, as a year and a quarter number.
|
|
3
3
|
*
|
|
4
|
-
* -
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
* belongs to the previous fiscal year, so `getQuarter("2024-03-31", { fiscalYearStartMonth:
|
|
8
|
-
* 4 })` is Q4 of 2023.
|
|
9
|
-
* - **`year` is the calendar year the fiscal year starts in**, matching the NRF retail
|
|
4
|
+
* - With no options these are the calendar quarters: Q1 is January to March, and `year` is
|
|
5
|
+
* the calendar year.
|
|
6
|
+
* - Labelling a fiscal year by the calendar year it starts in matches the NRF retail
|
|
10
7
|
* convention `getFiscalPeriod` uses. Organisations that label a fiscal year by the calendar
|
|
11
|
-
* year it *ends* in —
|
|
12
|
-
* 2024 — should add one
|
|
8
|
+
* year it *ends* in — for a fiscal year that starts in October, FY2025 begins in October
|
|
9
|
+
* 2024 — should add one to `year`.
|
|
13
10
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
14
11
|
* `getIsoWeekDate` for why a moment is not accepted here.
|
|
15
12
|
* - Returns null on invalid input, including a `fiscalYearStartMonth` that is not an integer
|
|
16
13
|
* from 1 to 12.
|
|
17
14
|
*
|
|
18
15
|
* @param value zoneless ISO 8601 date or datetime string (e.g. "2024-06-15")
|
|
19
|
-
* @param optionsArg
|
|
16
|
+
* @param optionsArg The month the fiscal year starts in
|
|
20
17
|
* @returns { year, quarter }, or null on invalid input
|
|
21
18
|
*
|
|
22
19
|
* @example getQuarter("2024-06-15") // { year: 2024, quarter: 2 }
|
|
@@ -29,8 +26,23 @@
|
|
|
29
26
|
* @example getQuarter("invalid") // null
|
|
30
27
|
*/
|
|
31
28
|
export declare function getQuarter(value: string, optionsArg?: {
|
|
29
|
+
/**
|
|
30
|
+
* The month the year starts in, 1 (January) through 12, which makes the quarters fiscal
|
|
31
|
+
* quarters. A date before it belongs to the previous fiscal year, so with `4` the date
|
|
32
|
+
* `"2024-03-31"` is Q4 of 2023.
|
|
33
|
+
*
|
|
34
|
+
* @defaultValue `1`
|
|
35
|
+
*/
|
|
32
36
|
fiscalYearStartMonth?: number;
|
|
33
37
|
}): {
|
|
38
|
+
/**
|
|
39
|
+
* The year the quarter belongs to. With `fiscalYearStartMonth` set, it is the calendar year the
|
|
40
|
+
* fiscal year starts in, so a date before the start month reports the previous year.
|
|
41
|
+
*/
|
|
34
42
|
year: number;
|
|
43
|
+
/**
|
|
44
|
+
* The quarter of that year, 1 through 4. Quarter 1 begins in the `fiscalYearStartMonth` month,
|
|
45
|
+
* which is January by default.
|
|
46
|
+
*/
|
|
35
47
|
quarter: number;
|
|
36
48
|
} | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { zonelessCalendarDate } from "../../internal/index.js";
|
|
2
2
|
import { isOptionsArgument } from "../../internal/isObject.js";
|
|
3
|
+
import { optionOrDefault } from "../../internal/optionOrDefault.js";
|
|
3
4
|
/** Months in a quarter. */
|
|
4
5
|
const MONTHS_PER_QUARTER = 3;
|
|
5
6
|
/** Months in a year. */
|
|
@@ -7,22 +8,19 @@ const MONTHS_PER_YEAR = 12;
|
|
|
7
8
|
/**
|
|
8
9
|
* Return the quarter `value` falls in, as a year and a quarter number.
|
|
9
10
|
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
* belongs to the previous fiscal year, so `getQuarter("2024-03-31", { fiscalYearStartMonth:
|
|
14
|
-
* 4 })` is Q4 of 2023.
|
|
15
|
-
* - **`year` is the calendar year the fiscal year starts in**, matching the NRF retail
|
|
11
|
+
* - With no options these are the calendar quarters: Q1 is January to March, and `year` is
|
|
12
|
+
* the calendar year.
|
|
13
|
+
* - Labelling a fiscal year by the calendar year it starts in matches the NRF retail
|
|
16
14
|
* convention `getFiscalPeriod` uses. Organisations that label a fiscal year by the calendar
|
|
17
|
-
* year it *ends* in —
|
|
18
|
-
* 2024 — should add one
|
|
15
|
+
* year it *ends* in — for a fiscal year that starts in October, FY2025 begins in October
|
|
16
|
+
* 2024 — should add one to `year`.
|
|
19
17
|
* - `value` must be zoneless — an ISO date or datetime, as `isValidIsoDateLike` accepts. See
|
|
20
18
|
* `getIsoWeekDate` for why a moment is not accepted here.
|
|
21
19
|
* - Returns null on invalid input, including a `fiscalYearStartMonth` that is not an integer
|
|
22
20
|
* from 1 to 12.
|
|
23
21
|
*
|
|
24
22
|
* @param value zoneless ISO 8601 date or datetime string (e.g. "2024-06-15")
|
|
25
|
-
* @param optionsArg
|
|
23
|
+
* @param optionsArg The month the fiscal year starts in
|
|
26
24
|
* @returns { year, quarter }, or null on invalid input
|
|
27
25
|
*
|
|
28
26
|
* @example getQuarter("2024-06-15") // { year: 2024, quarter: 2 }
|
|
@@ -39,9 +37,7 @@ export function getQuarter(value, optionsArg) {
|
|
|
39
37
|
if (!isOptionsArgument(optionsArg)) {
|
|
40
38
|
return null;
|
|
41
39
|
}
|
|
42
|
-
const fiscalYearStartMonth = optionsArg?.fiscalYearStartMonth
|
|
43
|
-
? 1
|
|
44
|
-
: optionsArg.fiscalYearStartMonth;
|
|
40
|
+
const fiscalYearStartMonth = optionOrDefault(optionsArg?.fiscalYearStartMonth, 1);
|
|
45
41
|
if (!Number.isInteger(fiscalYearStartMonth) ||
|
|
46
42
|
fiscalYearStartMonth < 1 ||
|
|
47
43
|
fiscalYearStartMonth > MONTHS_PER_YEAR) {
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return the instant at which `duration` of open time has elapsed since `start`: the deadline
|
|
4
|
+
* of a service level measured in working hours.
|
|
5
|
+
*
|
|
6
|
+
* - The earliest instant `X` such that `operatingTimeBetween(start, X, schedule)` equals
|
|
7
|
+
* `duration`. The clock stops while the schedule is closed and resumes when it reopens, so an
|
|
8
|
+
* eight-hour SLA raised at Friday 16:00 on a 09:00–17:00 weekday desk falls due on Monday at
|
|
9
|
+
* 16:00. A deadline that lands exactly on a closing time is that closing instant, not the next
|
|
10
|
+
* opening.
|
|
11
|
+
* - `duration` is hours and smaller units (`"PT8H"`, `"PT90M"`). A duration with days, weeks,
|
|
12
|
+
* months or years returns `""`: `P1D` of open time could mean 24 open hours or one working
|
|
13
|
+
* day, and GMT does not guess. `"PT0S"` returns `start` itself, in UTC.
|
|
14
|
+
* - Returns `""` when the deadline would fall past the search horizon, rather than searching
|
|
15
|
+
* forever.
|
|
16
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
17
|
+
* - Returns `""` on invalid input: an invalid instant, duration or `OperatingSchedule`, a
|
|
18
|
+
* negative `duration`, a `within` that is not a non-negative ISO duration, a `disambiguation`
|
|
19
|
+
* that is not one of the four values, and a search that would go more than 10,000 local dates past the input's date.
|
|
20
|
+
*
|
|
21
|
+
* @param start ISO 8601 instant string where the clock starts
|
|
22
|
+
* @param duration ISO 8601 duration of open time, hours and smaller units (e.g. "PT8H")
|
|
23
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
24
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
25
|
+
* @returns UTC instant string ending in "Z", or "" when past the horizon or on invalid input
|
|
26
|
+
*
|
|
27
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — Friday 16:00 to Monday 10:00 local
|
|
28
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT1H", { timeZone: "America/New_York", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-14T21:00:00Z" — due at closing, not at the next opening
|
|
29
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — past the horizon
|
|
30
|
+
* @example addOperatingTime("2024-06-15T12:00:00Z", "PT0S", { timeZone: "UTC", weekly: {} }) // "2024-06-15T12:00:00Z"
|
|
31
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "P1D", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "" — days are not open time
|
|
32
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "-PT1H", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // ""
|
|
33
|
+
*/
|
|
34
|
+
export declare function addOperatingTime(start: string, duration: string, schedule: OperatingSchedule, optionsArg?: {
|
|
35
|
+
/**
|
|
36
|
+
* How far after `start` the search may go, as a non-negative ISO 8601 duration added in the
|
|
37
|
+
* schedule's zone, so `"P1D"` is one local day. A deadline exactly at that horizon counts, and a
|
|
38
|
+
* horizon past Temporal's last instant stops there.
|
|
39
|
+
*
|
|
40
|
+
* @defaultValue `"P1Y"`
|
|
41
|
+
*/
|
|
42
|
+
within?: string;
|
|
43
|
+
/**
|
|
44
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
45
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
46
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
47
|
+
* both cases. `"reject"` returns `""` when a window with such an edge could add open time
|
|
48
|
+
* before the deadline.
|
|
49
|
+
*
|
|
50
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
51
|
+
*/
|
|
52
|
+
disambiguation?: Disambiguation;
|
|
53
|
+
}): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { instantAfterOpenTime, instantText, parseOpenTimeAmount, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return the instant at which `duration` of open time has elapsed since `start`: the deadline
|
|
5
|
+
* of a service level measured in working hours.
|
|
6
|
+
*
|
|
7
|
+
* - The earliest instant `X` such that `operatingTimeBetween(start, X, schedule)` equals
|
|
8
|
+
* `duration`. The clock stops while the schedule is closed and resumes when it reopens, so an
|
|
9
|
+
* eight-hour SLA raised at Friday 16:00 on a 09:00–17:00 weekday desk falls due on Monday at
|
|
10
|
+
* 16:00. A deadline that lands exactly on a closing time is that closing instant, not the next
|
|
11
|
+
* opening.
|
|
12
|
+
* - `duration` is hours and smaller units (`"PT8H"`, `"PT90M"`). A duration with days, weeks,
|
|
13
|
+
* months or years returns `""`: `P1D` of open time could mean 24 open hours or one working
|
|
14
|
+
* day, and GMT does not guess. `"PT0S"` returns `start` itself, in UTC.
|
|
15
|
+
* - Returns `""` when the deadline would fall past the search horizon, rather than searching
|
|
16
|
+
* forever.
|
|
17
|
+
* - Holidays and overrides apply as in `operatingIntervals`.
|
|
18
|
+
* - Returns `""` on invalid input: an invalid instant, duration or `OperatingSchedule`, a
|
|
19
|
+
* negative `duration`, a `within` that is not a non-negative ISO duration, a `disambiguation`
|
|
20
|
+
* that is not one of the four values, and a search that would go more than 10,000 local dates past the input's date.
|
|
21
|
+
*
|
|
22
|
+
* @param start ISO 8601 instant string where the clock starts
|
|
23
|
+
* @param duration ISO 8601 duration of open time, hours and smaller units (e.g. "PT8H")
|
|
24
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
25
|
+
* @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
|
|
26
|
+
* @returns UTC instant string ending in "Z", or "" when past the horizon or on invalid input
|
|
27
|
+
*
|
|
28
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — Friday 16:00 to Monday 10:00 local
|
|
29
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT1H", { timeZone: "America/New_York", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-14T21:00:00Z" — due at closing, not at the next opening
|
|
30
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "PT2H", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — past the horizon
|
|
31
|
+
* @example addOperatingTime("2024-06-15T12:00:00Z", "PT0S", { timeZone: "UTC", weekly: {} }) // "2024-06-15T12:00:00Z"
|
|
32
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "P1D", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // "" — days are not open time
|
|
33
|
+
* @example addOperatingTime("2024-06-14T20:00:00Z", "-PT1H", { timeZone: "UTC", weekly: { 5: [{ from: "09:00", to: "17:00" }] } }) // ""
|
|
34
|
+
*/
|
|
35
|
+
export function addOperatingTime(start, duration, schedule, optionsArg) {
|
|
36
|
+
try {
|
|
37
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
38
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
39
|
+
const from = parseInstantNanoseconds(start);
|
|
40
|
+
const amount = parseOpenTimeAmount(duration);
|
|
41
|
+
if (disambiguation === null ||
|
|
42
|
+
resolved === null ||
|
|
43
|
+
from === null ||
|
|
44
|
+
amount === null) {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
|
|
48
|
+
if (horizon === null) {
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
const answer = instantAfterOpenTime(resolved, from, amount, horizon, disambiguation);
|
|
52
|
+
return typeof answer === "bigint" ? instantText(answer) : "";
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Never throws (Core Rule 3): a hostile
|
|
56
|
+
// argument is invalid input, not an exception.
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./addOperatingTime.js";
|
|
2
|
+
export * from "./isOpenAt.js";
|
|
3
|
+
export * from "./nextCloseAt.js";
|
|
4
|
+
export * from "./nextOpenAt.js";
|
|
5
|
+
export * from "./operatingIntervals.js";
|
|
6
|
+
export * from "./operatingTimeBetween.js";
|
|
7
|
+
export * from "./recurringWindows.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./addOperatingTime.js";
|
|
2
|
+
export * from "./isOpenAt.js";
|
|
3
|
+
export * from "./nextCloseAt.js";
|
|
4
|
+
export * from "./nextOpenAt.js";
|
|
5
|
+
export * from "./operatingIntervals.js";
|
|
6
|
+
export * from "./operatingTimeBetween.js";
|
|
7
|
+
export * from "./recurringWindows.js";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Return true when `schedule` is open at the instant `isoString`.
|
|
4
|
+
*
|
|
5
|
+
* - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
|
|
6
|
+
* instant is open, a closing instant is closed. Where one window ends as the next begins, the
|
|
7
|
+
* schedule stays open.
|
|
8
|
+
* - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
|
|
9
|
+
* on Saturday even when Saturday is a holiday.
|
|
10
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
|
|
11
|
+
* never supplies the zone — the schedule's own zone reads the windows. Only its instant is
|
|
12
|
+
* read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
|
|
13
|
+
* - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
|
|
14
|
+
* `disambiguation` that is not one of the four values. Check the schedule with
|
|
15
|
+
* `operatingIntervals` when "closed" and "invalid" must be told apart.
|
|
16
|
+
*
|
|
17
|
+
* @param isoString ISO 8601 instant string to test
|
|
18
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
19
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
20
|
+
* @returns true when open at that instant, or false when closed or on invalid input
|
|
21
|
+
*
|
|
22
|
+
* @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
|
|
23
|
+
* @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
|
|
24
|
+
* @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
|
|
25
|
+
* @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
|
|
26
|
+
* @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
|
|
27
|
+
*/
|
|
28
|
+
export declare function isOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
|
|
29
|
+
/**
|
|
30
|
+
* How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
|
|
31
|
+
* resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
|
|
32
|
+
* later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
|
|
33
|
+
* both cases. `"reject"` returns `false` when a window with such an edge is the only one that
|
|
34
|
+
* could be open at `isoString`.
|
|
35
|
+
*
|
|
36
|
+
* @defaultValue `"compatible"`, Temporal's default.
|
|
37
|
+
*/
|
|
38
|
+
disambiguation?: Disambiguation;
|
|
39
|
+
}): boolean;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { parseInstantNanoseconds } from "../../internal/index.js";
|
|
2
|
+
import { firstOpenInstant, parseOperatingSchedule, parseScheduleDisambiguation, } from "../../internal/operatingSchedule.js";
|
|
3
|
+
/**
|
|
4
|
+
* Return true when `schedule` is open at the instant `isoString`.
|
|
5
|
+
*
|
|
6
|
+
* - Open means inside one of the half-open intervals `operatingIntervals` returns: an opening
|
|
7
|
+
* instant is open, a closing instant is closed. Where one window ends as the next begins, the
|
|
8
|
+
* schedule stays open.
|
|
9
|
+
* - A window belongs to the date it starts on, so a Friday 23:00–06:00 window is open at 01:00
|
|
10
|
+
* on Saturday even when Saturday is a holiday.
|
|
11
|
+
* - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required, and a bracketed zone
|
|
12
|
+
* never supplies the zone — the schedule's own zone reads the windows. Only its instant is
|
|
13
|
+
* read, a minute-rounded offset as the bracketed zone's real one (see `isValidInstant`).
|
|
14
|
+
* - Returns `false` on invalid input: an invalid instant or `OperatingSchedule`, or a
|
|
15
|
+
* `disambiguation` that is not one of the four values. Check the schedule with
|
|
16
|
+
* `operatingIntervals` when "closed" and "invalid" must be told apart.
|
|
17
|
+
*
|
|
18
|
+
* @param isoString ISO 8601 instant string to test
|
|
19
|
+
* @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
|
|
20
|
+
* @param optionsArg How a window edge on a clock change is resolved
|
|
21
|
+
* @returns true when open at that instant, or false when closed or on invalid input
|
|
22
|
+
*
|
|
23
|
+
* @example isOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // true — Monday 10:00 local
|
|
24
|
+
* @example isOpenAt("2024-06-17T21:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — 17:00 local, the window has closed
|
|
25
|
+
* @example isOpenAt("2024-06-15T01:00:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // true — Friday's night window, on Saturday morning
|
|
26
|
+
* @example isOpenAt("2024-07-04T14:00:00Z", { timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }) // false — a holiday
|
|
27
|
+
* @example isOpenAt("2024-06-17T14:00:00", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // false — no offset, not an instant
|
|
28
|
+
*/
|
|
29
|
+
export function isOpenAt(isoString, schedule, optionsArg) {
|
|
30
|
+
try {
|
|
31
|
+
const disambiguation = parseScheduleDisambiguation(optionsArg);
|
|
32
|
+
const resolved = parseOperatingSchedule(schedule);
|
|
33
|
+
const at = parseInstantNanoseconds(isoString);
|
|
34
|
+
if (disambiguation === null || resolved === null || at === null) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return firstOpenInstant(resolved, at, at, disambiguation) === at;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Never throws (Core Rule 3): a hostile
|
|
41
|
+
// argument is invalid input, not an exception.
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|