UNPKG

@burglekitt/gmt

Version:

Temporal-based date and time utilities with timezone support and polyfill integration

32 lines (31 loc) 1.25 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidZonedDateTime } from "../validate/index.js"; /** * Return true when `value` represents an instant strictly before now. * * - Unlike the plain `isPast`, which compares calendar days, this compares * the exact instant `value` represents against `Temporal.Now.instant()` — * `value` carries a full time-of-day, not just a date. * - `value === now` (to the precision available) returns false — "past" * means strictly before, not on-or-before. * - Returns false if `value` is invalid. * * @param value ISO ZonedDateTime string * @returns true if `value` is before the current instant, false on invalid input * * @example isZonedPast("2020-01-01T00:00:00Z[UTC]") // true (an instant in the distant past) * @example isZonedPast("2999-01-01T00:00:00Z[UTC]") // false (an instant in the distant future) * @example isZonedPast("invalid") // false */ export function isZonedPast(value) { if (!isValidZonedDateTime(value)) { return false; } try { const instant = Temporal.ZonedDateTime.from(value).toInstant(); return Temporal.Instant.compare(instant, Temporal.Now.instant()) === -1; } catch { return false; } }