Skip to content

intervalUnionDateTime

intervalUnionDateTime(aStart: string, aEnd: string, bStart: string, bEnd: string): { start: string; end: string; } | null

Return the combined span of two datetime intervals, or null when they are disjoint.

  • Uses Temporal.PlainDateTime.compare for comparison.
  • Half-open: an interval holds every t with start <= t < end. The union is returned only when it is one non-empty interval — the single run CORE-6’s mergeIntervals would give.
  • Overlapping intervals, and touching intervals (aEnd === bStart), return their combined span.
  • Two non-empty intervals with any gap between them return null, even a one-unit gap. The caveat matters: an empty interval is the empty set, so it is never “separated” from anything. A non-empty interval unioned with an empty one far away is still that non-empty interval — see the next bullet — not null.
  • An empty interval (start === end) is the empty set: it adds nothing, so the union is the other interval. Two empty intervals have no non-empty union and return null.
  • Returns null if either interval is invalid (start > end).
  • Returns null on invalid input (wrong type, malformed strings).
ParameterTypeDescription
aStartstringISO 8601 datetime string for the first interval start
aEndstringISO 8601 datetime string for the first interval end
bStartstringISO 8601 datetime string for the second interval start
bEndstringISO 8601 datetime string for the second interval end

{ start, end } with the merged span, or null on invalid input / disjoint intervals

Members

MemberTypeDescription
startstringThe date-time the interval begins at, as an ISO 8601 date-time string with no offset or time zone.
endstringThe first date-time 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 { intervalUnionDateTime } from "@northguild/gmt/plain/interval";
intervalUnionDateTime("2024-01-01T09:00:00", "2024-01-01T13:00:00", "2024-01-01T12:00:00", "2024-01-01T17:00:00") // { start: "2024-01-01T09:00:00", end: "2024-01-01T17:00:00" }
output 

plain/interval/intervalUnionDateTime.ts