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() i formatToParts().
Na tej stronie

Przykład

#
JavaScript
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'))
Konsola
1 dzień temu
za 3 dni
2 godziny temu
5 minut temu

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

#
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") oraz style ("long", "short" lub "narrow").

Więcej przykładów

#
Słowa zamiast liczb
JavaScript
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'))
Konsola
przedwczoraj
wczoraj
dzisiaj
jutro
pojutrze
w przyszłym tygodniu
3 dni temu

Gdy dla danej wartości język nie ma osobnego słowa, jak przy trzech dniach, formater wraca do zapisu z liczbą.

Czas od publikacji wpisu
JavaScript
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))
Konsola
45 minut temu
5 godzin temu
wczoraj
10 sekund temu
Krótszy zapis i inne języki
JavaScript
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'))
Konsola
za 3 godz.
2 mies. temu
yesterday
in 2 weeks

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

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.