Skip to content

intervalXorDateTime

intervalXorDateTime(aStart: string, aEnd: string, bStart: string, bEnd: string): { start: string; end: string; }[]
import { intervalXorDateTime } from "@northguild/gmt/plain/interval";

Return the symmetric difference of two datetime intervals — time covered by exactly one interval.

  • Uses Temporal.PlainDateTime.compare for comparison.
  • Returns [] when intervals are identical or both invalid.
  • Returns [{ start, end }] when one interval fully contains the other.
  • Returns [{ start, end }, { start, end }] when intervals partially overlap.
  • Returns [] if either interval is invalid (start > end).
  • Returns [] on invalid input (wrong type, malformed strings).
Parameter Type Description
aStart string ISO 8601 datetime string for the first interval start
aEnd string ISO 8601 datetime string for the first interval end
bStart string ISO 8601 datetime string for the second interval start
bEnd string ISO 8601 datetime string for the second interval end

array of { start, end } records representing the symmetric difference, or [] on invalid input

intervalXorDateTime("2024-01-01T09:00:00", "2024-06-30T12:00:00", "2024-04-01T11:00:00", "2024-12-31T17:00:00") // [{ start: "2024-01-01T09:00:00", end: "2024-03-31T17:00:00" }, { start: "2024-06-30T12:00:01", end: "2024-12-31T17:00:00" }]
intervalXorDateTime("2024-01-01T09:00:00", "2024-12-31T17:00:00", "2024-04-01T11:00:00", "2024-06-30T12:00:00") // [{ start: "2024-01-01T09:00:00", end: "2024-03-31T17:00:00" }, { start: "2024-06-30T12:00:01", end: "2024-12-31T17:00:00" }]
intervalXorDateTime("2024-01-01T09:00:00", "2024-12-31T17:00:00", "2024-01-01T09:00:00", "2024-12-31T17:00:00") // []
intervalXorDateTime("invalid", "2024-06-30T12:00:00", "2024-07-01T13:00:00", "2024-12-31T17:00:00") // []

plain/interval/intervalXorDateTime.ts