UNPKG

@burglekitt/gmt

Version:

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

36 lines (35 loc) 1.4 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidTimeZone } from "../../zoned/index.js"; import { isValidUtc } from "../validate/index.js"; /** * Convert a UTC datetime string to a plain date string in the format "YYYY-MM-DD". * * - Converts to specified timezone before extracting date. * - Defaults to UTC if no timezone specified. * - Returns "" for invalid input. * * @param value UTC datetime string (e.g., "2024-02-29T00:00:00Z") * @param options optional: timeZone (IANA) * @returns plain date string in "YYYY-MM-DD" format or "" on invalid input * * @example convertUtcToPlainDate("2024-02-29T00:00:00Z") // "2024-02-29" * @example convertUtcToPlainDate("2024-02-29T00:00:00Z", { timeZone: "America/New_York" }) // "2024-02-28" * @example convertUtcToPlainDate("invalid") // "" */ export function convertUtcToPlainDate(value, options) { const { timeZone = "UTC" } = options ?? {}; if (!isValidTimeZone(timeZone)) return ""; if (!isValidUtc(value)) return ""; try { const instant = Temporal.Instant.from(value); const zonedDateTime = instant.toZonedDateTimeISO(timeZone); return `${zonedDateTime.year.toString().padStart(4, "0")}-${zonedDateTime.month .toString() .padStart(2, "0")}-${zonedDateTime.day.toString().padStart(2, "0")}`; } catch { return ""; } }