CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-react-intl

Internationalize React apps with components and APIs for formatting dates, numbers, strings, pluralization and translations.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

date-time.mddocs/

Date and Time Formatting

Locale-aware date and time formatting components with support for relative times, date ranges, and custom formats.

Capabilities

Date Formatting

Component for formatting dates according to locale-specific conventions.

/**
 * Component for locale-aware date formatting
 * Supports all Intl.DateTimeFormat options plus custom format configurations
 */
const FormattedDate: React.FC<
  Intl.DateTimeFormatOptions & 
  CustomFormatConfig & {
    /** Date value to format (Date object, timestamp, or ISO string) */
    value: string | number | Date | undefined;
    /** Render prop receiving formatted date string */
    children?(formattedDate: string): React.ReactElement | null;
  }
>;

Usage Examples:

import { FormattedDate } from "react-intl";

// Basic date formatting
<FormattedDate value={new Date()} />

// Custom date format
<FormattedDate 
  value={new Date()} 
  year="numeric" 
  month="long" 
  day="numeric" 
/>

// Named format (requires format definition in IntlProvider)
<FormattedDate value={new Date()} format="short" />

// Render prop pattern
<FormattedDate value={userRegistrationDate}>
  {(formattedDate) => (
    <span className="registration-date">
      Member since {formattedDate}
    </span>
  )}
</FormattedDate>

// Different locales format differently
// en-US: "12/25/2023"
// de-DE: "25.12.2023" 
// ja-JP: "2023/12/25"

Time Formatting

Component for formatting time values with locale-specific conventions.

/**
 * Component for locale-aware time formatting
 * Supports all Intl.DateTimeFormat time options plus custom configurations
 */
const FormattedTime: React.FC<
  Intl.DateTimeFormatOptions & 
  CustomFormatConfig & {
    /** Time value to format (Date object, timestamp, or ISO string) */
    value: string | number | Date | undefined;
    /** Render prop receiving formatted time string */
    children?(formattedTime: string): React.ReactElement | null;
  }
>;

Usage Examples:

import { FormattedTime } from "react-intl";

// Basic time formatting  
<FormattedTime value={new Date()} />

// 12-hour format with seconds
<FormattedTime 
  value={new Date()} 
  hour12={true}
  hour="numeric"
  minute="2-digit"
  second="2-digit"
/>

// 24-hour format
<FormattedTime 
  value={new Date()} 
  hour12={false}
  hour="2-digit" 
  minute="2-digit"
/>

Relative Time Formatting

Component for displaying relative time with automatic updates and locale-aware formatting.

/**
 * Component for relative time formatting with optional auto-updating
 * @param props - Relative time configuration and update options
 */
function FormattedRelativeTime(props: FormatRelativeTimeOptions & {
  /** Relative time value (number of units) */
  value?: number;
  /** Time unit for the value */
  unit?: Intl.RelativeTimeFormatUnit;
  /** Interval in seconds for automatic updates */
  updateIntervalInSeconds?: number;
  /** Render prop receiving formatted relative time string */
  children?(value: string): React.ReactElement | null;
}): React.ReactElement;

Usage Examples:

import { FormattedRelativeTime } from "react-intl";

// Static relative time
<FormattedRelativeTime value={-1} unit="day" />
// Output: "1 day ago"

<FormattedRelativeTime value={2} unit="hour" />
// Output: "in 2 hours"

// Auto-updating relative time
<FormattedRelativeTime 
  value={-30} 
  unit="second"
  updateIntervalInSeconds={1}
/>
// Updates every second: "30 seconds ago", "31 seconds ago", etc.

// Numeric style options
<FormattedRelativeTime 
  value={-1} 
  unit="day"
  numeric="auto"
/>
// Output: "yesterday" (vs "1 day ago" with numeric="always")

// Different locales
// en: "3 minutes ago"
// es: "hace 3 minutos"
// ja: "3分前"

Date Range Formatting

Component for formatting date and time ranges with proper locale conventions.

/**
 * Component for formatting date/time ranges
 * @param props - Date range values and formatting options
 */
function FormattedDateTimeRange(props: FormatDateTimeRangeOptions & {
  /** Start date/time of the range */
  from: Parameters<Intl.DateTimeFormat['formatRange']>[0];
  /** End date/time of the range */
  to: Parameters<Intl.DateTimeFormat['formatRange']>[1];
  /** Render prop receiving formatted range string */
  children?(value: React.ReactNode): React.ReactElement | null;
}): React.ReactElement;

Usage Examples:

import { FormattedDateTimeRange } from "react-intl";

// Date range
<FormattedDateTimeRange 
  from={new Date('2023-12-01')} 
  to={new Date('2023-12-03')}
/>
// Output: "Dec 1 – 3, 2023"

// Time range
<FormattedDateTimeRange
  from={new Date('2023-12-01T09:00:00')}
  to={new Date('2023-12-01T17:00:00')}
  hour="numeric"
  minute="2-digit"
/>
// Output: "9:00 AM – 5:00 PM"

// Cross-day range
<FormattedDateTimeRange
  from={new Date('2023-12-01T22:00:00')}
  to={new Date('2023-12-02T02:00:00')}
  month="short"
  day="numeric"
  hour="numeric"
/>
// Output: "Dec 1, 10 PM – Dec 2, 2 AM"

Date/Time Parts Formatting

Components that provide low-level access to formatted date/time parts for custom rendering.

/**
 * Component for accessing formatted date parts
 * Useful for custom date rendering and styling
 */
const FormattedDateParts: React.FC<
  FormatDateOptions & {
    /** Date value to format into parts */
    value: Parameters<Intl.DateTimeFormat['format']>[0] | string;
    /** Render prop receiving array of date parts */
    children(val: Intl.DateTimeFormatPart[]): React.ReactElement | null;
  }
>;

/**
 * Component for accessing formatted time parts
 * Useful for custom time rendering and styling
 */
const FormattedTimeParts: React.FC<
  FormatDateOptions & {
    /** Time value to format into parts */
    value: Parameters<Intl.DateTimeFormat['format']>[0] | string;
    /** Render prop receiving array of time parts */
    children(val: Intl.DateTimeFormatPart[]): React.ReactElement | null;
  }
>;

Usage Examples:

import { FormattedDateParts, FormattedTimeParts } from "react-intl";

// Custom date rendering with parts
<FormattedDateParts 
  value={new Date()} 
  year="numeric" 
  month="long" 
  day="numeric"
>
  {(parts) => (
    <div className="custom-date">
      {parts.map((part, index) => (
        <span 
          key={index} 
          className={`date-${part.type}`}
        >
          {part.value}
        </span>
      ))}
    </div>
  )}
</FormattedDateParts>

// Custom time with highlighted hours
<FormattedTimeParts 
  value={new Date()} 
  hour="2-digit" 
  minute="2-digit"
>
  {(parts) => (
    <div>
      {parts.map((part, index) => (
        <span 
          key={index}
          className={part.type === 'hour' ? 'highlight' : ''}
        >
          {part.value}
        </span>
      ))}
    </div>
  )}
</FormattedTimeParts>

Types

interface FormatDateOptions extends Intl.DateTimeFormatOptions {
  format?: string;
}

interface FormatRelativeTimeOptions {
  /** Formatting style for relative time */
  style?: 'long' | 'short' | 'narrow';
  /** Whether to use numeric format always or auto (yesterday vs 1 day ago) */
  numeric?: 'always' | 'auto';
  /** Locale matcher algorithm */
  localeMatcher?: 'best fit' | 'lookup';
}

interface FormatDateTimeRangeOptions extends Intl.DateTimeFormatOptions {
  format?: string;
}

// Standard Intl.RelativeTimeFormatUnit
type RelativeTimeFormatUnit = 
  | 'year' | 'years'
  | 'quarter' | 'quarters' 
  | 'month' | 'months'
  | 'week' | 'weeks'
  | 'day' | 'days'
  | 'hour' | 'hours'
  | 'minute' | 'minutes'
  | 'second' | 'seconds';

// Date/time format parts
interface DateTimeFormatPart {
  type: 'era' | 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'weekday' | 'dayPeriod' | 'timeZoneName' | 'literal';
  value: string;
}

docs

date-time.md

hooks.md

index.md

inject-intl.md

messages.md

number-list.md

provider.md

tile.json