Skip to content

intervalIntersectionTime

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

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

  • Uses Temporal.PlainTime.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 clock time 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 time string for the first interval start
aEndstringISO 8601 time string for the first interval end
bStartstringISO 8601 time string for the second interval start
bEndstringISO 8601 time string for the second interval end

{ start, end } with the overlapping span, or null on invalid input / no overlap

Members

MemberTypeDescription
startstringThe clock time the interval begins at, as an ISO 8601 time string with no date, offset or time zone.
endstringThe first clock 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 { intervalIntersectionTime } from "@northguild/gmt/plain/interval";
intervalIntersectionTime("09:00:00", "17:00:00", "12:00:00", "18:00:00") // { start: "12:00:00", end: "17:00:00" }
output 

plain/interval/intervalIntersectionTime.ts