UNPKG

@burglekitt/gmt

Version:

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

46 lines (45 loc) 1.89 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidZonedDateTime } from "../validate/index.js"; /** * Compare two zoned datetime strings for exact local-field equality. * * - Inputs must be valid ISO 8601 zoned datetime strings. * - Returns `true` when year/month/day/hour/minute/second/millisecond/microsecond/nanosecond and IANA timeZone id all match; otherwise `false`. * - Invalid inputs return `false`. * * @param value1 first zoned datetime string * @param value2 second zoned datetime string * @returns boolean indicating whether the two zoned datetimes are equal * * @example areZonedEqual("2024-02-29T12:34:56.789+00:00[UTC]", "2024-02-29T12:34:56.789+00:00[UTC]") // true * @example areZonedEqual("invalid", "2024-02-29T12:34:56.789+00:00[UTC]") // false */ export function areZonedEqual(value1, value2) { if (!isValidZonedDateTime(value1) || !isValidZonedDateTime(value2)) { return false; } let zonedDateTime1; let zonedDateTime2; try { zonedDateTime1 = Temporal.ZonedDateTime.from(value1); zonedDateTime2 = Temporal.ZonedDateTime.from(value2); } catch { return false; } try { return (zonedDateTime1.year === zonedDateTime2.year && zonedDateTime1.month === zonedDateTime2.month && zonedDateTime1.day === zonedDateTime2.day && zonedDateTime1.hour === zonedDateTime2.hour && zonedDateTime1.minute === zonedDateTime2.minute && zonedDateTime1.second === zonedDateTime2.second && zonedDateTime1.millisecond === zonedDateTime2.millisecond && zonedDateTime1.microsecond === zonedDateTime2.microsecond && zonedDateTime1.nanosecond === zonedDateTime2.nanosecond && zonedDateTime1.timeZoneId === zonedDateTime2.timeZoneId); } catch { return false; } }