Skip to main content

Formatting API

Methods for converting Atemporal instances to various string formats and other representations.

.format()

Formats the date using token strings or native Intl.DateTimeFormat options.
format(formatString: string, localeCode?: string): string
format(options?: Intl.DateTimeFormatOptions, localeCode?: string): string
formatString
string
Day.js-style token string (e.g., ‘YYYY-MM-DD HH:mm:ss’)
options
Intl.DateTimeFormatOptions
Native Intl.DateTimeFormat options for advanced localization
localeCode
string
Optional IANA locale string (e.g., ‘es-CR’, ‘en-US’). Defaults to the default locale.
return
string
The formatted date string

Format Tokens

TokenOutput ExampleDescription
YYYY20244-digit year
YY242-digit year
MMMMJanuaryFull month name
MMMJanAbbreviated month name
MM01Month, 2-digits (01-12)
M1Month (1-12)
DD09Day of month, 2-digits (01-31)
D9Day of month (1-31)
ddddSundayFull day name
dddSunShort day name
ddSuMin day name
d0Day of week, Sunday as 0 (0-6)
HH15Hour, 2-digits (00-23)
H15Hour (0-23)
hh03Hour, 12-hour clock, 2-digits (01-12)
h3Hour, 12-hour clock (1-12)
mm05Minute, 2-digits (00-59)
m5Minute (0-59)
ss02Second, 2-digits (00-59)
s2Second (0-59)
SSS123Millisecond, 3-digits (000-999)
APMAM PM (uppercase)
apmam pm (lowercase)
Z+05:30UTC offset, ±HH:mm
ZZ+0530UTC offset, ±HHmm
zAmerica/New_YorkIANA time zone name
zzzESTShort localized time zone name
zzzzEastern Standard TimeLong localized time zone name

Token-Based Formatting Examples

const date = atemporal('2024-07-16T15:30:15.123Z');

// Basic formats
date.format('YYYY-MM-DD');                    // '2024-07-16'
date.format('MM/DD/YYYY');                    // '07/16/2024'
date.format('MMMM D, YYYY');                  // 'July 16, 2024'
date.format('dddd, MMMM D, YYYY');            // 'Tuesday, July 16, 2024'

// Time formats
date.format('HH:mm:ss');                      // '15:30:15'
date.format('hh:mm:ss A');                    // '03:30:15 PM'
date.format('h:mm A');                        // '3:30 PM'

// Combined formats
date.format('YYYY-MM-DD HH:mm:ss');           // '2024-07-16 15:30:15'
date.format('MMM D, YYYY [at] h:mm A');       // 'Jul 16, 2024 at 3:30 PM'
date.format('ddd, MMM D, YYYY - h:mm:ss A');  // 'Tue, Jul 16, 2024 - 3:30:15 PM'

// With milliseconds
date.format('HH:mm:ss.SSS');                  // '15:30:15.123'

// With timezone
date.format('YYYY-MM-DD HH:mm:ss Z');         // '2024-07-16 15:30:15 +00:00'
date.format('YYYY-MM-DD HH:mm:ss z');         // '2024-07-16 15:30:15 UTC'

// With locale
date.format('MMMM D, YYYY', 'es');            // 'julio 16, 2024'
date.format('dddd, MMMM D, YYYY', 'fr');      // 'mardi, juillet 16, 2024'

Intl.DateTimeFormat Examples

const date = atemporal('2024-07-16T15:30:15Z');

// Using Intl options for advanced localization
date.format({ 
  dateStyle: 'full', 
  timeStyle: 'medium' 
}, 'es');
// => 'martes, 16 de julio de 2024, 15:30:15'

date.format({ 
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
}, 'en-US');
// => 'Tuesday, July 16, 2024'

date.format({
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  hour12: true
});
// => '03:30:15 PM'

date.format({
  dateStyle: 'short'
}, 'en-GB');
// => '16/07/2024'
The formatting system uses an optimized engine with caching and token pooling for high performance.

.toString()

Returns the canonical ISO 8601 string representation of the date-time.
toString(): string
return
string
The formatted ISO 8601 string

Examples

const date1 = atemporal('2024-01-15T10:30:45.500Z');
date1.toString();
// => '2024-01-15T10:30:45.500Z'

const date2 = atemporal('2024-01-15T10:30:00.000Z');
date2.toString();
// => '2024-01-15T10:30:00Z' (no fractional seconds when zero)

const date3 = atemporal('2024-01-15T10:30:45-05:00');
date3.toString();
// => '2024-01-15T10:30:45-05:00'

const invalid = atemporal('invalid');
invalid.toString();
// => 'Invalid Date'
Uses ‘Z’ for UTC and includes milliseconds only when non-zero.

.toJSON()

Alias for .toString(). Useful for JSON serialization.
toJSON(): string
return
string
The formatted ISO 8601 string

Examples

const date = atemporal('2024-01-15T10:30:45Z');

const obj = {
  name: 'Event',
  timestamp: date
};

JSON.stringify(obj);
// => '{"name":"Event","timestamp":"2024-01-15T10:30:45Z"}'

.toDate()

Converts the Atemporal instance to a legacy JavaScript Date object.
toDate(): Date
return
Date
A JavaScript Date object, or an invalid Date if the instance is invalid

Examples

const atDate = atemporal('2024-01-15T10:30:45Z');
const jsDate = atDate.toDate();

console.log(jsDate instanceof Date); // true
console.log(jsDate.toISOString());   // '2024-01-15T10:30:45.000Z'

// Use with libraries that expect Date objects
const chart = new Chart({
  data: [
    { x: atemporal('2024-01-01').toDate(), y: 100 },
    { x: atemporal('2024-01-02').toDate(), y: 150 }
  ]
});

// Invalid dates
const invalid = atemporal('invalid');
const invalidDate = invalid.toDate();
console.log(isNaN(invalidDate.getTime())); // true
JavaScript Date objects lose timezone information. Only use when interoperability requires it.

.raw / .datetime

Provides direct access to the underlying Temporal.ZonedDateTime object.
get datetime(): Temporal.ZonedDateTime
get raw(): Temporal.ZonedDateTime
return
Temporal.ZonedDateTime
The underlying Temporal.ZonedDateTime object

Examples

const date = atemporal('2024-01-15T10:30:00Z');

// Access the raw Temporal object
const temporal = date.raw;
const datetime = date.datetime; // Same as .raw

// Use native Temporal methods
console.log(temporal.epochMilliseconds); // 1705318200000
console.log(temporal.epochNanoseconds);  // 1705318200000000000n
console.log(temporal.offset);            // '+00:00'

// Convert to other Temporal types
const plainDate = temporal.toPlainDate();
const plainTime = temporal.toPlainTime();
const instant = temporal.toInstant();
Throws InvalidAtemporalInstanceError if the instance is invalid.

Locale Support

Set a default locale for all formatting operations.
import atemporal from 'atemporal';

// Set default locale
atemporal.setDefaultLocale('es-MX');

const date = atemporal('2024-01-15');
date.format('MMMM D, YYYY'); // 'enero 15, 2024'

// Override for specific format
date.format('MMMM D, YYYY', 'fr-FR'); // 'janvier 15, 2024'

// Get current default locale
const locale = atemporal.getDefaultLocale(); // 'es-MX'

Performance Metrics

Atemporal provides formatting performance insights.

Static Methods

import { Atemporal } from 'atemporal';

// Get formatting metrics
const metrics = Atemporal.getFormattingMetrics();
console.log(metrics);
/*
{
  totalFormats: 1543,
  averageFormatTime: 0.234,
  cacheHits: 1320,
  fastPathHits: 1105,
  tokenPoolStats: { ... },
  compilationStats: { ... }
}
*/

// Get performance report
const report = Atemporal.getFormattingPerformanceReport();
console.log(report);
/*
Formatting Performance Report:
Total Formats: 1543
Average Format Time: 0.234ms
Cache Hit Ratio: 85.55%
Fast Path Hit Ratio: 71.61%
...
*/

// Reset formatting system
Atemporal.resetFormattingSystem();

// Pre-warm with common patterns
Atemporal.prewarmFormattingSystem();

Build docs developers (and LLMs) love