dateRangeOverlap function

(DateTime, DateTime)? dateRangeOverlap(
  1. DateTime aStart,
  2. DateTime aEnd,
  3. DateTime bStart,
  4. DateTime bEnd,
)

Overlap of two date ranges. Returns (start, end) of overlap or null if none.

Ranges are inclusive: aStart, aEnd and bStart, bEnd.

Implementation

(DateTime start, DateTime end)? dateRangeOverlap(
  DateTime aStart,
  DateTime aEnd,
  DateTime bStart,
  DateTime bEnd,
) {
  final DateTime overlapStart = aStart.isAfter(bStart) ? aStart : bStart;
  final DateTime overlapEnd = aEnd.isBefore(bEnd) ? aEnd : bEnd;
  if (overlapStart.isAfter(overlapEnd)) return null;
  return (overlapStart, overlapEnd);
}