Intl. RelativeTimeFormat
Formatuje czas względny w wybranym języku, np. „za 3 dni”, „2 godziny temu” albo „wczoraj”.
- Zwraca
- Obiekt formatera z metodami
format()iformatToParts().
Przykład
#const rtf = new Intl.RelativeTimeFormat('pl-PL')
console.log(rtf.format(-1, 'day'))
console.log(rtf.format(3, 'day'))
console.log(rtf.format(-2, 'hour'))
console.log(rtf.format(-5, 'minute'))Definicja i zastosowanie
#Intl.RelativeTimeFormat zamienia liczbę i jednostkę czasu na naturalny opis. format(-2, "hour") daje po polsku „2 godziny temu”, a format(3, "day") „za 3 dni”. Liczba ujemna oznacza przeszłość, a dodatnia przyszłość. Formater sam dobiera poprawną odmianę słów w danym języku.
Dostępne jednostki to "second", "minute", "hour", "day", "week", "month", "quarter" i "year". Opcja numeric: "auto" pozwala użyć słów zamiast liczb tam, gdzie język je ma: „wczoraj”, „jutro”, „przedwczoraj”, „w przyszłym tygodniu”. Opcja style z wartościami "long", "short" i "narrow" skraca zapis, np. do „za 3 godz.”.
Formater nie liczy różnicy między datami. To Ty obliczasz, ile sekund, minut czy dni minęło, i wybierasz jednostkę. Zwykle robi to krótka funkcja, która sprawdza wielkość różnicy i dobiera największą sensowną jednostkę, tak jak w przykładzie z czasem publikacji poniżej.
Składnia
#new Intl.RelativeTimeFormat(locales)
new Intl.RelativeTimeFormat(locales, options)
formatter.format(value, unit)Parametry
#locales
opcjonalny, napis lub tablica
Kod języka, np."pl-PL"albo"en-US". Pominięty oznacza język przeglądarki.options
opcjonalny obiekt
Ustawienia:numeric("always"lub"auto") orazstyle("long","short"lub"narrow").
Więcej przykładów
#const rtf = new Intl.RelativeTimeFormat('pl-PL', { numeric: 'auto' })
for (const days of [-2, -1, 0, 1, 2]) {
console.log(rtf.format(days, 'day'))
}
console.log(rtf.format(1, 'week'))
console.log(rtf.format(-3, 'day'))Gdy dla danej wartości język nie ma osobnego słowa, jak przy trzech dniach, formater wraca do zapisu z liczbą.
const rtf = new Intl.RelativeTimeFormat('pl-PL', { numeric: 'auto' })
function timeAgo(date, now) {
const seconds = Math.round((date - now) / 1000)
const units = [
['day', 86400],
['hour', 3600],
['minute', 60]
]
for (const [unit, size] of units) {
if (Math.abs(seconds) >= size) {
return rtf.format(Math.round(seconds / size), unit)
}
}
return rtf.format(seconds, 'second')
}
const now = new Date('2026-09-29T12:00:00Z')
console.log(timeAgo(new Date('2026-09-29T11:15:00Z'), now))
console.log(timeAgo(new Date('2026-09-29T07:00:00Z'), now))
console.log(timeAgo(new Date('2026-09-28T09:00:00Z'), now))
console.log(timeAgo(new Date('2026-09-29T11:59:50Z'), now))const short = new Intl.RelativeTimeFormat('pl-PL', { style: 'short' })
const en = new Intl.RelativeTimeFormat('en-US', { numeric: 'auto' })
console.log(short.format(3, 'hour'))
console.log(short.format(-2, 'month'))
console.log(en.format(-1, 'day'))
console.log(en.format(2, 'week'))Obsługa przeglądarek
#Szeroko dostępne · od 2020 roku
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Włącz
numeric: "auto", żeby zamiast „1 dzień temu” pokazać naturalne „wczoraj”, a zamiast „za 1 dzień” słowo „jutro”. - Pilnuj znaku liczby: wartość ujemna to przeszłość („temu”), dodatnia to przyszłość („za”). Odejmowanie dat w złej kolejności to najczęstszy błąd.
- Do dokładnych terminów, np. daty oddania projektu, używaj
Intl.DateTimeFormat. Czas względny najlepiej sprawdza się przy świeżych zdarzeniach: powiadomieniach, komentarzach i aktywności znajomych.
Powiązane hasła
#- Intl.DateTimeFormatFormatuje daty i godziny zgodnie z zasadami wybranego języka i strefy czasowej.
- DateObiekt reprezentujący konkretny moment w czasie, z metodami do odczytu i zmiany daty oraz godziny.
- Intl.PluralRulesWybiera właściwą odmianę słowa po liczebniku w danym języku. Po polsku: 1 punkt, 2 punkty, 5 punktów.
- Intl.NumberFormatFormatuje liczby zgodnie z zasadami danego języka: separatory, waluty, procenty i jednostki.
Widzisz błąd albo brakuje przykładu? Napisz do nas.