UNPKG

@burglekitt/gmt

Version:

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

37 lines (36 loc) 1.95 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidZonedDateTime } from "../validate/index.js"; /** * Sort an array of ZonedDateTime values in ascending or descending order. * * - Invalid dates are filtered out. * - Defaults to ascending order (earliest first). * - Returns empty array if no valid dates. * * @param zonedDateTimes Array of ISO ZonedDateTime strings * @param order "asc" for ascending (earliest first) | "desc" for descending (latest first) * @returns Sorted array of zoned datetime strings * * @example sortZoned(["2024-03-10T12:00:00[America/New_York]", "2024-01-01T08:00:00[America/New_York]", "2024-02-15T15:30:00[America/New_York]"]) // ["2024-01-01T08:00:00-05:00[America/New_York]", "2024-02-15T15:30:00-05:00[America/New_York]", "2024-03-10T12:00:00-04:00[America/New_York]"] * @example sortZoned(["2024-03-10T12:00:00[America/New_York]", "2024-01-01T08:00:00[America/New_York]", "2024-02-15T15:30:00[America/New_York]"], "desc") // ["2024-03-10T12:00:00-04:00[America/New_York]", "2024-02-15T15:30:00-05:00[America/New_York]", "2024-01-01T08:00:00-05:00[America/New_York]"] * @example sortZoned(["invalid", "2024-01-01T08:00:00[America/New_York]", "2024-02-15T15:30:00[America/New_York]"]) // ["2024-01-01T08:00:00-05:00[America/New_York]", "2024-02-15T15:30:00-05:00[America/New_York]"] * @example sortZoned([]) // [] */ export function sortZoned(zonedDateTimes, order = "asc") { if (!zonedDateTimes.length) return []; const valid = zonedDateTimes.filter(isValidZonedDateTime); if (!valid.length) return []; try { const comparables = valid.map((d) => Temporal.ZonedDateTime.from(d)); comparables.sort(Temporal.ZonedDateTime.compare); if (order === "desc") { return comparables.reverse().map((d) => d.toString()); } return comparables.map((d) => d.toString()); } catch { return []; } }