Skip to content

nextOpenAt

nextOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: { within?: string; disambiguation?: "compatible" | "earlier" | "later" | "reject" | undefined; }): string

Return the first instant at or after isoString that schedule is open, as a UTC instant.

  • Already open at isoString: returns isoString itself, in UTC. Otherwise returns the start of the next open interval — the moment a gate opens, or a notice can be tendered.
  • Returns "" when the schedule does not open within the search horizon, rather than searching forever.
  • Holidays and overrides apply as in operatingIntervals.
  • isoString is an instant: an offset (Z, ±HH:MM) is required.
  • Returns "" on invalid input: an invalid instant or OperatingSchedule, a within that is not a non-negative ISO duration, a disambiguation that is not one of the four values, and a search that would go more than 10,000 local dates past the input’s date.
  • Limit at an offset with seconds. The instant is placed in the offset’s whole-minute zone, moved by its seconds, and the moved instant must be inside Temporal’s range. So within the offset’s seconds (under a minute) of the last instant Temporal supports (+275760-09-13T00:00:00Z) for an offset east of UTC, or of the first (-271821-04-20T00:00:00Z) for one west, this returns "". An offset to the minute has no such limit.
ParameterTypeDescription
isoStringstringISO 8601 instant string to search from, inclusive
scheduleOperatingSchedule{ timeZone, weekly, holidays?, overrides? } operating schedule

optionsArg

How far the search goes, and how a window edge on a clock change is resolved

OptionTypeDefaultDescription
within?string"P1Y"How far after isoString the search may go, as a non-negative ISO 8601 duration added in the schedule’s zone, so "P1D" is one local day. An opening exactly at that horizon counts, and a horizon past Temporal’s last instant stops there.
disambiguation?"compatible" | "earlier" | "later" | "reject" (Disambiguation)"compatible", Temporal’s default.How a window edge in a repeated or skipped local hour becomes an instant, as resolveLocal resolves it. "compatible" takes the earlier instant of a repeated fall-back hour and the later one of a skipped spring-forward hour, and "earlier" and "later" take that side in both cases. "reject" returns "" when a window with such an edge could open before the answer.

UTC instant string ending in “Z”, or "" when none within the horizon or on invalid input

import { nextOpenAt } from "@northguild/gmt/calendar/hours";
nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T13:00:00Z" — Saturday noon to Monday 09:00 local
output 

calendar/hours/nextOpenAt.ts