Skip to content

dateRangeOverlap ​

Provides date range overlap detection capabilities.

Usage ​

The plugin offers both a standalone static function and instance methods.

Standalone Function ​

checkDateRangeOverlap is exported directly from the atemporal package — no plugin extension needed for the static function:

ts
import atemporal, { checkDateRangeOverlap } from "atemporal";

const range1 = { start: "2024-01-01", end: "2024-01-15" };
const range2 = { start: "2024-01-10", end: "2024-01-20" };

const result = checkDateRangeOverlap(range1, range2);
console.log(result.overlaps); // true
console.log(result.overlapRange); // { start: ..., end: ... }

Plugin Extension (Instance Methods) ​

For instance methods, extend atemporal with the plugin:

ts
import atemporal from "atemporal";
import dateRangeOverlapPlugin from "atemporal/plugins/dateRangeOverlap";

atemporal.extend(dateRangeOverlapPlugin);

const range1 = { start: "2024-01-01", end: "2024-01-15" };
const range2 = { start: "2024-01-10", end: "2024-01-20" };

// Static method (also available directly via plugin)
const result = atemporal.checkDateRangeOverlap(range1, range2);
console.log(result.overlaps); // true
console.log(result.overlapRange); // { start: ..., end: ... }

Instance Method ​

ts
const date = atemporal("2024-01-15");
const range = { start: "2024-01-10", end: "2024-01-20" };

const result = date.rangeOverlapsWith(range);
console.log(result.overlaps); // true
console.log(result.overlapRange); // { start: 2024-01-15, end: 2024-01-15 } (point)

.to(endDate: DateInput) ​

Returns a DateRange object bridging the instance to the given end date.

ts
const start = atemporal("2024-01-01");
const rangeObj = start.to("2024-01-15");
// returns { start: atemporal("2024-01-01"), end: atemporal("2024-01-15") }

// Use the result directly with checkDateRangeOverlap
const overlap = checkDateRangeOverlap(
  start.to("2024-01-15"),
  atemporal("2024-01-10").to("2024-01-20")
);
console.log(overlap.overlaps); // true

Configuration ​

ts
const result = checkDateRangeOverlap(range1, range2, {
  includeBoundaries: true,   // Whether touching ranges count as overlap (default: true)
  timezone: "UTC",            // Timezone for date interpretation (default: UTC)
  strictValidation: true,     // Perform strict input validation (default: true)
});
  • includeBoundaries: When true (default), adjacent ranges touching at a boundary count as overlapping. When false, they do not.
  • timezone: The IANA time zone to interpret date strings in (default: UTC).
  • strictValidation: When true (default), invalid inputs throw InvalidDateRangeError.

Return Type ​

ts
interface OverlapResult {
  overlaps: boolean;
  overlapRange: DateRange | null;
}

Caching ​

Results are cached via OverlapCache (LRU-based, max 200 entries) for repeated checks on the same ranges. The cache is registered with the GlobalCacheCoordinator for unified cache management.

Error Types ​

The plugin exports custom error classes available both from the plugin and the main package:

ts
import {
  InvalidDateRangeError,
  OverlapDetectionError,
} from "atemporal";
// (also available from "atemporal/plugins/dateRangeOverlap")