intervalLengthZoned
Signature
Section titled “Signature”intervalLengthZoned(start: string, end: string, unit: string): number | nullReturn the exact length of a zoned interval in unit, as a real (possibly fractional) number.
- Distinct from
intervalCountZoned, which counts local calendarunitboundaries crossed rather than measuring exact duration — a local day that springs forward touches 1 day boundary viaintervalCountZonedbut is exactly23/24 ≈ 0.958days viaintervalLengthZoned. - Uses
Temporal.Duration.prototype.totalwithrelativeToset tostart, so the result is DST-aware: dividing a spring-forward day’s length in hours returns23, not24. - Returns
0for a zero-length interval (start === end). - Two values in different time zones (by TC39 TimeZoneEquals, so
UTCequalsEtc/UTC) can only be measured in time units: a calendar unit (day, week, month, year) returns null, as Temporal’suntilthrows, because day lengths differ between zones. - Compatibility: before 1.16.0 a calendar unit across two zones returned a number. To measure such a pair, convert both ends to one zone first with
convertZonedToZoned. - Accepts RFC 9557 calendar-annotated zoned strings (as produced by
convertZonedToCalendar) as well as bare ISO ones — E7 (issue #152). When BOTH endpoints carry the same calendar tag the measurement is made in that calendar. When they name different calendars (a bare ISO string namesiso8601) the result isnullin every unit,"hour"included, asZonedDateTime.prototype.untilthrows when TC39CalendarEqualsis false (before 1.16.0 it was measured in ISO). - Returns
nullon invalid input (unparseable start/end,start > end, unsupported unit, leap-second strings). - Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the
[u-ca=<id>]annotation after the zone, canonical calendar ids); seeisValidCalendarZonedDateTime.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
start | string | ISO 8601 zoned datetime string for the interval start |
end | string | ISO 8601 zoned datetime string for the interval end |
unit | string | unit string — any DateTimeUnit |
Returns
Section titled “Returns”exact length of the interval expressed in unit, or null on invalid input
Examples
Section titled “Examples”import { intervalLengthZoned } from "@northguild/gmt/zoned/interval";
intervalLengthZoned("2024-03-10T00:00:00-05:00[America/New_York]", "2024-03-11T00:00:00-04:00[America/New_York]", "hour") // 23 (spring forward)