Hooks
useFormatDateTime
A React hook that returns a memoised Intl.DateTimeFormat instance, letting you format dates and times in any locale with just a few props.
December 25, 2025 at 2:30 PM
Usage
Anatomy
import {useFormatDateTime} from '@staffbase/design/hooks';
const EventDate = ({date}: {date: Date}) => {
const locale = navigator.language; // or from your i18n context
const formatter = useFormatDateTime(locale, 'long', 'short');
return <time dateTime={date.toISOString()}>{formatter.format(date)}</time>;
}; Date only vs time only
Anatomy
// Date only — pass undefined for timeStyle
const dateFormatter = useFormatDateTime('de-DE', 'long', undefined);
dateFormatter.format(new Date()); // "25. Dezember 2025"
// Time only — pass undefined for dateStyle
const timeFormatter = useFormatDateTime('de-DE', undefined, 'short');
timeFormatter.format(new Date()); // "14:30"
Format styles
dateStyle
| dateStyle | Output |
|---|---|
short | 12/25/25 |
medium | Dec 25, 2025 |
long | December 25, 2025 |
timeStyle
| timeStyle | Output |
|---|---|
short | 2:30 PM |
medium | 2:30:00 PM |
Combined
short | medium | |
|---|---|---|
short | 12/25/25, 2:30 PM | 12/25/25, 2:30:00 PM |
medium | Dec 25, 2025, 2:30 PM | Dec 25, 2025, 2:30:00 PM |
long | December 25, 2025 at 2:30 PM | December 25, 2025 at 2:30:00 PM |
Formatting date ranges
December 25, 2025 – January 3, 2026
Anatomy
import {useFormatDateTime} from '@staffbase/design/hooks';
const EventDuration = ({start, end}: {start: Date; end: Date}) => {
const locale = navigator.language;
const formatter = useFormatDateTime(locale, 'long', 'short');
// "December 25, 2025, 2:30 PM – January 3, 2026, 9:15 AM"
return <span>{formatter.formatRange(start, end)}</span>;
}; Anatomy
const formatter = useFormatDateTime('en-US', 'long', undefined);
const parts = formatter.formatRangeToParts(start, end);
return (
<span>
{parts.map((part, i) =>
part.source === 'shared' ? <span key={i}>{part.value}</span> : <strong key={i}>{part.value}</strong>,
)}
</span>
); API reference
useFormatDateTime(locale, dateStyle, timeStyle)
| Name | Type | Description |
|---|---|---|
locale | stringstring[]Intl.LocaleIntl.Locale[] | A BCP 47 language tag (or list of tags) passed to Intl.DateTimeFormat. |
dateStyle | shortmediumlongundefined | How the date portion is rendered. Pass undefined to omit the date. |
timeStyle | shortmediumundefined | How the time portion is rendered. Pass undefined to omit the time. |