Skip to content

intervalXorAllUtc

intervalXorAllUtc(intervals: { start: string; end: string; }[]): { start: string; end: string; }[]

Return the symmetric difference across a list of UTC intervals — the set of instants covered by an odd number of the input intervals.

  • List-form generalization of intervalXorUtc, which is pairwise only.
  • Half-open: an interval holds every t with start <= t < end. The result is every maximal run covered an odd number of times, computed as a coverage-parity sweep over the start and end boundaries. Runs end exactly at a boundary; no boundary is ever stepped by one unit, so an interval may end on the type’s last value without overflow or midnight wrap.
  • Touching odd runs join into one run; an empty interval (start === end) contributes nothing. For two intervals this is exactly intervalXorUtc’s pairwise result.
  • Order of the input list does not matter; the result is sorted by start.
  • Returns [] for an empty list, and [] when every instant is covered an even number of times (e.g. two identical intervals cancel out).
  • Returns [] when intervals is not an array, when any element is not a { start, end } record of valid ISO UTC datetime strings, or when any element has start > end or a leap-second string.
ParameterTypeDescription
intervals{ start: string; end: string; }[]array of { start, end } records

array of { start, end } records covered an odd number of times, or [] on invalid input

Members of each item

MemberTypeDescription
startstringThe instant the interval begins at, as an ISO 8601 UTC string ending in Z.
endstringThe first instant after the interval, in the same format as start. It is exclusive: the interval holds everything from start up to but not including this value. It is always later than start.
import { intervalXorAllUtc } from "@northguild/gmt/utc/interval";
intervalXorAllUtc([{ start: "2024-01-01T09:00:00Z", end: "2024-01-01T13:00:00Z" }, { start: "2024-01-01T12:00:00Z", end: "2024-01-01T17:00:00Z" }]) // [{ start: "2024-01-01T09:00:00Z", end: "2024-01-01T12:00:00Z" }, { start: "2024-01-01T13:00:00Z", end: "2024-01-01T17:00:00Z" }]
intervals
output 

utc/interval/intervalXorAllUtc.ts