Skip to content

intervalDifferenceDateTime

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

Return the portion(s) of interval A not covered by interval B.

  • Uses Temporal.PlainDateTime.compare for comparison.
  • Returns [] when B fully covers A.
  • Returns [{ start, end }] when B overlaps one edge of A (or equals A).
  • Returns [{ start, end }, { start, end }] when B is fully inside A with gaps on both sides.
  • 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 A minus B, or [] on invalid input

intervalDifferenceDateTime("2024-01-01T09:00:00", "2024-12-31T17:00:00", "2024-06-01T12:00:00", "2024-07-01T13:00:00") // [{ start: "2024-01-01T09:00:00", end: "2024-05-31T17:00:00" }, { start: "2024-07-01T13:00:01", end: "2024-12-31T17:00:00" }]
intervalDifferenceDateTime("2024-01-01T09:00:00", "2024-12-31T17:00:00", "2024-01-01T09:00:00", "2024-12-31T17:00:00") // []
intervalDifferenceDateTime("invalid", "2024-12-31T17:00:00", "2024-06-01T12:00:00", "2024-07-01T13:00:00") // []

plain/interval/intervalDifferenceDateTime.ts