Skip to content

toISO8601

Converts a date to ISO 8601 format Format: YYYY-MM-DDTHH:mm:ss.sssZ

Available since v2.0.0

import { toISO8601 } from '@helpers4/date';
toISO8601(date: DateLike): string | null
ParameterTypeDescription
dateDateLikeDate to convert (Date object, timestamp, or date string)

string | null — ISO 8601 formatted string or null if invalid date

Formats a date as an ISO 8601 string.

toISO8601(new Date('2025-01-19T12:30:00Z'))
// => '2025-01-19T12:30:00.000Z'

RFC 3339 format strips milliseconds by default.

toRFC3339(new Date('2025-01-19T12:30:45.123Z'))
// => '2025-01-19T12:30:45Z'

RFC 2822 is used in email and HTTP headers.

toRFC2822(new Date('2025-01-19T12:30:00Z'))
// => 'Sun, 19 Jan 2025 12:30:00 +0000'

A value that can be converted to a Date.

  • Date — used as-is (validated for Invalid Date)
  • number — treated as a timestamp (seconds or milliseconds, auto-detected); 0 is treated as invalid and produces null in ensureDate
  • string — parsed via new Date(string)
  • EpochMilliseconds — any object with a epochMilliseconds property (e.g. Temporal.Instant, Temporal.ZonedDateTime)

// TODO: When the Temporal API reaches Stage 4 and is available without // flags in all major runtimes, consider narrowing the union to the // concrete Temporal types for stricter type-checking.

type DateLike = Date | number | string | EpochMilliseconds

An object that exposes an epoch timestamp in milliseconds.

This structural type is satisfied by Temporal.Instant and Temporal.ZonedDateTime (and any future object that carries the same property), so callers can pass Temporal values without importing them.

interface EpochMilliseconds {
  epochMilliseconds: number;
}

View source on GitHub