Skip to content

intervalsOverlapZoned

intervalsOverlapZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): boolean

Return true when the half-open intervals [aStart, aEnd) and [bStart, bEnd) share at least one instant.

  • Uses Temporal.Instant.compare for comparison (same instant semantics): aStart < bEnd && bStart < aEnd, the same rule as intervalsOverlap (SQL:2011 OVERLAPS on closed-open periods).
  • An interval excludes its end, so touching intervals (aEnd the same instant as bStart) do NOT overlap — returns false.
  • An empty interval (start and end the same instant) overlaps an interval only when it lies strictly inside it; at either edge, or against another empty interval, it returns false.
  • Returns false if either interval is invalid (start > end).
  • Returns false on invalid input (wrong type, malformed strings, leap seconds).
  • Accepts mixed calendar systems (E7’s D4-zoned, issue #152): both bare ISO zoned strings and RFC 9557 calendar-annotated ones ("2024-02-24T14:30:00-05:00[America/New_York][u-ca=hebrew]"), and the two endpoints need not agree on a calendar. Ordering is calendar-independent — verified that Temporal.Instant carries no calendar field at all and that Instant.compare/ZonedDateTime.compare both return 0 for the same instant expressed in hebrew, islamic-civil, japanese and iso8601.
  • Rejects a calendar annotation before the time zone annotation, which is not RFC 9557.
  • Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the [u-ca=<id>] annotation after the zone, canonical calendar ids); see isValidCalendarZonedDateTime.
ParameterTypeDescription
aStartstringISO 8601 zoned datetime string for the first interval start
aEndstringISO 8601 zoned datetime string for the first interval end
bStartstringISO 8601 zoned datetime string for the second interval start
bEndstringISO 8601 zoned datetime string for the second interval end

true if intervals overlap, or false on invalid input

import { intervalsOverlapZoned } from "@northguild/gmt/zoned/interval";
intervalsOverlapZoned("2024-01-01T00:00:00+00:00[UTC]", "2024-06-30T23:59:59+00:00[UTC]", "2024-04-01T00:00:00+00:00[UTC]", "2024-12-31T23:59:59+00:00[UTC]") // true
output 

zoned/interval/intervalsOverlapZoned.ts