Skip to content

intervalIntersectionDateTime

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

Return the overlapping span of two datetime intervals, or null when they do not overlap.

  • Uses Temporal.PlainDateTime.compare for comparison.
  • Half-open: an interval holds every t with start <= t < end. The intersection is [max(aStart, bStart), min(aEnd, bEnd)) when aStart < bEnd && bStart < aEnd (CORE-6’s intersectIntervals), otherwise null.
  • Touching intervals (aEnd === bStart) share no moment and return null.
  • An empty interval (start === end) intersects only an interval it lies strictly inside, and then returns itself.
  • 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 overlapping span, or null on invalid input / no overlap

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 can equal start, which makes the interval empty.
import { intervalIntersectionDateTime } from "@northguild/gmt/plain/interval";
intervalIntersectionDateTime("2024-01-01T09:00:00", "2024-01-01T13:00:00", "2024-01-01T12:00:00", "2024-01-01T17:00:00") // { start: "2024-01-01T12:00:00", end: "2024-01-01T13:00:00" }
output 

plain/interval/intervalIntersectionDateTime.ts