Skip to content

formatZonedDateTime

formatZonedDateTime(value: string, locale?: string | string[], options?: DateTimeFormatOptions): string

Format a zoned ISO 8601 datetime string using the Intl.DateTimeFormat implementation.

  • Formats as Temporal’s ECMA-402 ZonedDateTime format (ZonedDateTime#toLocaleString) does, through the runtime’s Intl.DateTimeFormat in the value’s own zone: the requested fields and widths are kept, and with no date or time field (era alone included) the date, time and a short zone name are the defaults.
  • Accepts optional locale and Intl.DateTimeFormatOptions.
  • Returns "" for invalid input, and for a timeZone option, where ZonedDateTime#toLocaleString throws a TypeError.
  • Output is normalized: dash separators become ASCII ”-” (unspaced between digits, spaced otherwise), and no-break, narrow and thin spaces become U+0020.
  • Compatibility: before 1.16.0 some locales and calendars lost a requested width (ja-JP with the japanese calendar and month: "long" gave "R6/2") and era alone dropped the time and zone name. Pass the fields the old text showed to keep it. To render in another zone, use formatUtc with its timeZone option.
  • options null returns "", as ECMA-402’s CoerceOptionsToObject rejects it (a string or number options value formats with the defaults, as Intl.DateTimeFormat does).
ParameterTypeDescription
valuestringzoned ISO 8601 datetime string
localestring | string[]optional locale tag (e.g. “en-US”), or a preference list of tags (ECMA-402)

options

optional Intl.DateTimeFormatOptions

Type: DateTimeFormatOptions.

OptionTypeDefaultDescription
…Intl.DateTimeFormatOptions——Every field of DateTimeFormatOptions, as ECMA-402 defines it.

localized string or "" when invalid

import { formatZonedDateTime } from "@northguild/gmt/zoned/format";
formatZonedDateTime("2024-02-29T12:34:56.789+00:00[UTC]", "en-US", { dateStyle: "long", timeStyle: "long" }) // "February 29, 2024 at 12:34:56 PM UTC"
output 

zoned/format/formatZonedDateTime.ts