Skip to content

intervalEngulfsZoned

intervalEngulfsZoned(aStart: string, aEnd: string, bStart: string, bEnd: string): boolean

Return true when the half-open interval B [bStart, bEnd) lies within the half-open interval A [aStart, aEnd) — every instant of B falls within A.

  • Uses Temporal.Instant.compare for comparison (via .toInstant()).
  • B is inside A when the intervals overlap and aStart <= bStart and bEnd <= aEnd by instant. Both ends are exclusive, so B may start at A’s start and end at A’s end.
  • An empty B counts only strictly inside A, the same edge rule as clampInterval; at either edge of A it returns false, and an empty A engulfs nothing.
  • Equivalent to 4-argument intervalContainsZoned(aStart, aEnd, bStart, bEnd).
  • Returns false if either interval is invalid (start > end).
  • Returns false on invalid input (wrong type, malformed strings, leap seconds).
  • Accepts mixed calendar systems (E7’s D4-zoned, issue #152): both bare ISO zoned strings and RFC 9557 calendar-annotated ones ("2024-02-24T14:30:00-05:00[America/New_York][u-ca=hebrew]"), and the two endpoints need not agree on a calendar. Ordering is calendar-independent — verified that Temporal.Instant carries no calendar field at all and that Instant.compare/ZonedDateTime.compare both return 0 for the same instant expressed in hebrew, islamic-civil, japanese and iso8601.
  • Rejects a calendar annotation before the time zone annotation, which is not RFC 9557.
  • Compatibility: since 1.16.0 calendar strings are RFC 9557 (ISO digits, the [u-ca=<id>] annotation after the zone, canonical calendar ids); see isValidCalendarZonedDateTime.
ParameterTypeDescription
aStartstringISO 8601 zoned datetime string for the outer interval start
aEndstringISO 8601 zoned datetime string for the outer interval end
bStartstringISO 8601 zoned datetime string for the inner interval start
bEndstringISO 8601 zoned datetime string for the inner interval end

true if B is fully contained in A, or false on invalid input

import { intervalEngulfsZoned } from "@northguild/gmt/zoned/interval";
intervalEngulfsZoned("2024-01-01T09:00:00+00:00[UTC]", "2024-12-31T17:00:00+00:00[UTC]", "2024-06-01T12:00:00+00:00[UTC]", "2024-07-01T13:00:00+00:00[UTC]") // true
output 

zoned/interval/intervalEngulfsZoned.ts