Skip to content

isValidInterval

isValidInterval(interval: Interval): boolean

Validate whether a value is an Interval the interval/ namespace accepts.

  • True when start and end are ISO 8601 instant strings (offset required, no leap second) and start is not after end.
  • A calendar annotation ([u-ca=hebrew], critical or not) and an elective unknown annotation ([foo=bar]) are ignored, as Temporal.Instant.from ignores them; an unknown critical annotation ([!foo=bar]) is rejected. A bracketed zone is not validated. It is read for one thing: an offset written to the minute that is the zone’s sub-minute offset rounded (-00:45[Africa/Monrovia], for −00:44:30) names the instant the zone gives, as Temporal.ZonedDateTime.from reads it.
  • Compares instants, not text: { start: "2024-01-01T10:00:00+01:00", end: "2024-01-01T09:30:00Z" } is valid even though it sorts backwards as a string.
  • start === end is valid — an empty interval.
  • Use it to tell a legitimate [] from mergeIntervals, subtractIntervals or splitIntervalAt apart from their invalid-input sentinel, which is also [].
  • Returns false for non-objects, null, and records whose start/end are not strings.
ParameterTypeDescription
intervalIntervalcandidate { start, end } record of ISO 8601 instant strings

boolean indicating whether every interval/ function accepts it

import { isValidInterval } from "@northguild/gmt/interval/validate";
isValidInterval({ start: "2024-01-01T09:00:00Z", end: "2024-01-01T17:00:00Z" }) // true
output 

interval/validate/isValidInterval.ts