Internationalize JS apps with APIs to format dates, numbers, and strings, including pluralization and handling translations.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Comprehensive date and time formatting with timezone support, custom formats, and parts-based output. Provides both individual functions and intl instance methods for locale-aware date and time presentation.
Formats dates according to locale with extensive customization options.
/**
* Format dates according to locale and options
* @param config - Configuration with locale, timezone, formats, and error handler
* @param getDateTimeFormat - DateTime formatter factory function
* @param value - Date value as Date object, string, or number
* @param options - Formatting options including custom format names
* @returns Formatted date string
*/
function formatDate(
config: {
locale: string;
timeZone?: string;
formats: CustomFormats;
onError: OnErrorFn;
},
getDateTimeFormat: Formatters['getDateTimeFormat'],
value: Date | string | number,
options?: FormatDateOptions
): string;Formats time values with locale-specific conventions and timezone handling.
/**
* Format time values with locale-specific conventions
* @param config - Configuration with locale, timezone, formats, and error handler
* @param getDateTimeFormat - DateTime formatter factory function
* @param value - Time value as Date object, string, or number
* @param options - Formatting options with default hour/minute display
* @returns Formatted time string
*/
function formatTime(
config: {
locale: string;
timeZone?: string;
formats: CustomFormats;
onError: OnErrorFn;
},
getDateTimeFormat: Formatters['getDateTimeFormat'],
value: Date | string | number,
options?: FormatDateOptions
): string;Usage Examples:
import { formatDate, formatTime, createFormatters } from "@formatjs/intl";
const config = {
locale: 'en-US',
timeZone: 'America/New_York',
formats: {
date: {
short: { month: 'numeric', day: 'numeric', year: '2-digit' },
long: { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }
}
},
onError: console.error
};
const formatters = createFormatters();
const date = new Date('2024-03-15T14:30:00Z');
// Basic date formatting
const basicDate = formatDate(config, formatters.getDateTimeFormat, date);
// Result: "3/15/2024" (in en-US locale)
// Custom format
const longDate = formatDate(config, formatters.getDateTimeFormat, date, { format: 'long' });
// Result: "Friday, March 15, 2024"
// Custom options
const customDate = formatDate(config, formatters.getDateTimeFormat, date, {
year: 'numeric',
month: 'short',
day: 'numeric',
weekday: 'short'
});
// Result: "Fri, Mar 15, 2024"
// Time formatting
const time = formatTime(config, formatters.getDateTimeFormat, date);
// Result: "10:30 AM" (adjusted for timezone)
// 24-hour format
const time24 = formatTime(config, formatters.getDateTimeFormat, date, {
hour: 'numeric',
minute: 'numeric',
hour12: false
});
// Result: "10:30" (adjusted for timezone)Format dates and times returning arrays of parts for custom rendering.
/**
* Format dates returning array of parts for custom rendering
* @param config - Configuration with locale, timezone, formats, and error handler
* @param getDateTimeFormat - DateTime formatter factory function
* @param value - Date value as Date object, string, or number
* @param options - Formatting options
* @returns Array of date parts with types and values
*/
function formatDateToParts(
config: {
locale: string;
timeZone?: string;
formats: CustomFormats;
onError: OnErrorFn;
},
getDateTimeFormat: Formatters['getDateTimeFormat'],
value: Date | string | number,
options?: FormatDateOptions
): Intl.DateTimeFormatPart[];
/**
* Format times returning array of parts for custom rendering
* @param config - Configuration with locale, timezone, formats, and error handler
* @param getDateTimeFormat - DateTime formatter factory function
* @param value - Time value as Date object, string, or number
* @param options - Formatting options
* @returns Array of time parts with types and values
*/
function formatTimeToParts(
config: {
locale: string;
timeZone?: string;
formats: CustomFormats;
onError: OnErrorFn;
},
getDateTimeFormat: Formatters['getDateTimeFormat'],
value: Date | string | number,
options?: FormatDateOptions
): Intl.DateTimeFormatPart[];Usage Examples:
// Date parts for custom rendering
const dateParts = formatDateToParts(config, formatters.getDateTimeFormat, date, {
year: 'numeric',
month: 'long',
day: 'numeric'
});
// Result: [
// { type: 'month', value: 'March' },
// { type: 'literal', value: ' ' },
// { type: 'day', value: '15' },
// { type: 'literal', value: ', ' },
// { type: 'year', value: '2024' }
// ]
// Custom rendering with parts
const customDateRender = dateParts
.map(part => {
if (part.type === 'month') {
return `<strong>${part.value}</strong>`;
}
return part.value;
})
.join('');
// Result: "<strong>March</strong> 15, 2024"
// Time parts
const timeParts = formatTimeToParts(config, formatters.getDateTimeFormat, date, {
hour: 'numeric',
minute: 'numeric',
dayPeriod: 'short'
});
// Result: [
// { type: 'hour', value: '10' },
// { type: 'literal', value: ':' },
// { type: 'minute', value: '30' },
// { type: 'literal', value: ' ' },
// { type: 'dayPeriod', value: 'AM' }
// ]Format date ranges with locale-appropriate range formatting.
/**
* Format date ranges with locale-appropriate range formatting
* @param config - Configuration with locale, timezone, and error handler
* @param getDateTimeFormat - DateTime formatter factory function
* @param from - Start date of the range
* @param to - End date of the range
* @param options - Formatting options for the range
* @returns Formatted date range string
*/
function formatDateTimeRange(
config: {
locale: string;
timeZone?: string;
onError: OnErrorFn;
},
getDateTimeFormat: Formatters['getDateTimeFormat'],
from: Date | string | number,
to: Date | string | number,
options?: FormatDateOptions
): string;Usage Examples:
const startDate = new Date('2024-03-15T09:00:00Z');
const endDate = new Date('2024-03-15T17:00:00Z');
// Date range formatting
const dateRange = formatDateTimeRange(
config,
formatters.getDateTimeFormat,
startDate,
endDate,
{
year: 'numeric',
month: 'short',
day: 'numeric',
hour: 'numeric',
minute: 'numeric'
}
);
// Result: "Mar 15, 2024, 5:00 AM – 1:00 PM"
// Different dates
const startDate2 = new Date('2024-03-15T09:00:00Z');
const endDate2 = new Date('2024-03-16T17:00:00Z');
const multiDayRange = formatDateTimeRange(
config,
formatters.getDateTimeFormat,
startDate2,
endDate2,
{
month: 'short',
day: 'numeric',
hour: 'numeric'
}
);
// Result: "Mar 15, 5:00 AM – Mar 16, 1:00 PM"Comprehensive options for date and time formatting.
type FormatDateOptions = Omit<Intl.DateTimeFormatOptions, 'localeMatcher'> & {
/** Named format reference from custom formats */
format?: string;
};
// Intl.DateTimeFormatOptions includes:
interface DateTimeFormatOptions {
formatMatcher?: 'basic' | 'best fit';
timeZone?: string;
hour12?: boolean;
weekday?: 'narrow' | 'short' | 'long';
era?: 'narrow' | 'short' | 'long';
year?: 'numeric' | '2-digit';
month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long';
day?: 'numeric' | '2-digit';
hour?: 'numeric' | '2-digit';
minute?: 'numeric' | '2-digit';
second?: 'numeric' | '2-digit';
timeZoneName?: 'short' | 'long' | 'shortOffset' | 'longOffset' | 'shortGeneric' | 'longGeneric';
hourCycle?: 'h11' | 'h12' | 'h23' | 'h24';
dateStyle?: 'full' | 'long' | 'medium' | 'short';
timeStyle?: 'full' | 'long' | 'medium' | 'short';
calendar?: string;
numberingSystem?: string;
fractionalSecondDigits?: 0 | 1 | 2 | 3;
}Usage Examples:
// Using dateStyle and timeStyle
const styledDate = formatDate(config, formatters.getDateTimeFormat, date, {
dateStyle: 'full',
timeStyle: 'short'
});
// Result: "Friday, March 15, 2024 at 10:30 AM"
// Custom calendar system
const hebrewDate = formatDate(
{ ...config, locale: 'he-IL' },
formatters.getDateTimeFormat,
date,
{
calendar: 'hebrew',
year: 'numeric',
month: 'long',
day: 'numeric'
}
);
// Fractional seconds
const preciseTime = formatTime(config, formatters.getDateTimeFormat, date, {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3
});
// Result: "10:30:00.000 AM"
// Timezone display
const timeWithZone = formatTime(config, formatters.getDateTimeFormat, date, {
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short'
});
// Result: "10:30 AM EST"Define reusable date format configurations.
Usage Examples:
const intl = createIntl({
locale: 'en-US',
timeZone: 'America/New_York',
formats: {
date: {
compact: {
month: 'numeric',
day: 'numeric'
},
verbose: {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
timeZoneName: 'short'
},
iso: {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}
},
time: {
brief: {
hour: 'numeric',
minute: 'numeric'
},
detailed: {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
timeZoneName: 'short'
}
}
}
});
// Use custom formats
const compactDate = intl.formatDate(date, { format: 'compact' });
// Result: "3/15"
const verboseDate = intl.formatDate(date, { format: 'verbose' });
// Result: "Friday, March 15, 2024 at 10:30 AM EST"
const briefTime = intl.formatTime(date, { format: 'brief' });
// Result: "10:30 AM"