Hooks
useFormatRelativeTime
A React hook that returns a memoised formatting function for locale-aware relative time, like "3 days ago", "yesterday", or "in 2 weeks".
3 days ago·yesterday·in 2 weeks
Durations at a glance
| Unit | Input | Output |
|---|---|---|
Years | { years: -2 } | 2 years ago |
| { years: -1 } | last year | |
| { years: 1 } | next year | |
| { years: 2 } | in 2 years | |
Months | { months: -2 } | 2 months ago |
| { months: -1 } | last month | |
| { months: 1 } | next month | |
| { months: 2 } | in 2 months | |
Weeks | { weeks: -2 } | 2 weeks ago |
| { weeks: -1 } | last week | |
| { weeks: 1 } | next week | |
| { weeks: 2 } | in 2 weeks | |
Days | { days: -2 } | 2 days ago |
| { days: -1 } | yesterday | |
| { days: 0 } | today | |
| { days: 1 } | tomorrow | |
| { days: 2 } | in 2 days |
Usage
Anatomy
import {useFormatRelativeTime} from '@staffbase/design/hooks';
const TimeAgo = ({date}: {date: Date}) => {
const locale = navigator.language; // or from your i18n context
const format = useFormatRelativeTime(locale);
const diffMs = date.getTime() - Date.now();
const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24));
return <time dateTime={date.toISOString()}>{format({days: diffDays})}</time>;
}; Unit priority
Anatomy
const format = useFormatRelativeTime('en-US');
format({years: -1, months: -3, days: -10}); // "last year" — years wins
format({months: -3, days: -10}); // "3 months ago" — months wins
format({weeks: -1, days: -10}); // "last week" — weeks wins
format({days: -3}); // "3 days ago"
format({days: 0}); // "today"
API reference
useFormatRelativeTime(locale)
| Name | Type | Description |
|---|---|---|
locale | stringstring[]Intl.LocaleIntl.Locale[] | A BCP 47 language tag (or list of tags) passed to Intl.RelativeTimeFormat. |