datetime Renderer
renderAs: 'datetime' formats a combined date-and-time value using Intl.DateTimeFormat. It adds relativeTime support for showing values like "3 days ago" alongside or instead of the absolute timestamp.
Core Examples
Basic Datetime
ISO datetime strings formatted with medium (default) and short presets.
{ key: 'postedAt', renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime' } }
{ key: 'updatedAt', renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', formatPreset: 'short' } }
Relative Time
relativeTime: true uses Intl.RelativeTimeFormat to compute "3 months ago", "in 2 days" etc. relativeDisplay: 'both' stacks the absolute value above the relative label:
Left: relative-only display. Right: absolute + relative stacked ('both' mode).
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', relativeTime: true, relativeDisplay: 'relative' } }
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', relativeTime: true, relativeDisplay: 'both' } }
Format Presets
short / medium / long / full presets applied to the same ISO datetime.
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', formatPreset: 'short' } }
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', formatPreset: 'medium' } } // default
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', formatPreset: 'long' } }
{ renderAs: 'datetime', renderAsOptions: { parseMode: 'iso-datetime', formatPreset: 'full' } } // includes timezone name
Options Reference
| Option | Type | Default | Effect |
|---|---|---|---|
parseMode | TemporalParseMode | required | How to parse the raw value. |
locale | string | 'en-US' | BCP 47 locale tag. |
timezone | string | 'local' | 'local', 'utc', or IANA zone. |
formatPreset | 'short' | 'medium' | 'long' | 'full' | 'medium' | Preset Intl option set. 'full' includes timezone name. |
formatOptions | Intl.DateTimeFormatOptions | unset | Full Intl.DateTimeFormat options — merged over formatPreset. |
showSeconds | boolean | false | Include seconds component. |
hour12 | boolean | locale default | Force 12h or 24h. |
relativeTime | boolean | false | Use Intl.RelativeTimeFormat instead of absolute formatting. |
relativeDisplay | 'relative' | 'both' | 'relative' | 'relative': relative text only. 'both': absolute on top, relative below. |
fallbackText | string | 'Invalid' | Text shown when parsing fails. |
className | string | unset | Additional CSS class on the root element. |
parseMode values
| Value | Parses |
|---|---|
'iso-datetime' | ISO 8601 datetime strings |
'epoch-ms' | Unix timestamp in milliseconds |
'epoch-sec' | Unix timestamp in seconds |
'iso-date' | YYYY-MM-DD strings (time component becomes 00:00:00) |
'any' | Auto-detect |
Caveats
parseModeis required. Without it the renderer outputsfallbackTextimmediately.- Relative time thresholds: seconds < 60s, minutes < 60m, hours < 24h, days < 30d, months < 12m, then years. All computed via
Intl.RelativeTimeFormat. relativeTimeuses the current wall clock at render time. The value is not live-updated — it reflects the time the component rendered.formatPreset: 'full'addstimeZoneName: 'short'to the Intl options, which displays the timezone abbreviation (e.g. "UTC", "EST").- All options accept
(entity) => valuefunctions for per-row dynamic values.
See Also
- timestamp Renderer — same capabilities,
parseModeis required (epoch values) - date Renderer — date-only
- time Renderer — time-only
- Field Config