Intl.RelativeTimeFormat în JavaScript

Formatează timpul relativ: „acum 3 zile”, „peste 2 ore”, „ieri”, „mâine”.

Sintaxă
const rtf = new Intl.RelativeTimeFormat("ro", optiuni);
rtf.format(valoare, unitate)

Ce face Intl.RelativeTimeFormat

format(valoare, unitate) returnează textul pentru o valoare negativă (trecut) sau pozitivă (viitor). Unități: "second", "minute", "hour", "day", "week", "month", "quarter", "year".

Cu { numeric: "auto" } primești expresii ca „ieri” și „mâine” în loc de „acum 1 zi”. formatToParts returnează bucățile, iar resolvedOptions și supportedLocalesOf funcționează ca la celelalte formatoare. Alegerea unității potrivite (minute, ore, zile) rămâne în grija ta.

Parametri

Parametru Descriere
valoare Numărul de unități; negativ pentru trecut.
unitate Unitatea de timp, la singular sau plural ("day" sau "days").

Ce returnează

Un obiect formator.

Exemple

Exemplul 1: Trecut și viitor

const rtf = new Intl.RelativeTimeFormat("ro");
const auto = new Intl.RelativeTimeFormat("ro", { numeric: "auto" });

console.log(rtf.format(-3, "day"), "|", rtf.format(2, "hour"), "|", rtf.format(-1, "day"));
console.log(auto.format(-1, "day"), "|", auto.format(1, "day"), "|", auto.format(0, "year"));
console.log(rtf.formatToParts(5, "minute"));

Rezultat

acum 3 zile | peste 2 ore | acum 1 zi
ieri | mâine | anul acesta
[
  { type: 'literal', value: 'peste ' },
  { type: 'integer', value: '5', unit: 'minute' },
  { type: 'literal', value: ' minute' }
]

Exemplul 2: „Publicat acum…” pentru un articol

const rtf = new Intl.RelativeTimeFormat("ro", { numeric: "auto" });
const UNITATI = [["year", 31536000], ["month", 2592000], ["day", 86400], ["hour", 3600], ["minute", 60]];

function relativ(data, acum) {
  const secunde = (data - acum) / 1000;
  for (const [unitate, s] of UNITATI) {
    if (Math.abs(secunde) >= s) return rtf.format(Math.round(secunde / s), unitate);
  }
  return rtf.format(Math.round(secunde), "second");
}

const acum = new Date(2026, 9, 19, 12, 0);
console.log(relativ(new Date(2026, 9, 19, 11, 15), acum));
console.log(relativ(new Date(2026, 9, 16, 12, 0), acum));
console.log(relativ(new Date(2025, 9, 1), acum));
console.log(rtf.resolvedOptions().numeric, Intl.RelativeTimeFormat.supportedLocalesOf(["ro"]));

Rezultat

acum 45 de minute
acum 3 zile
anul trecut
auto [ 'ro' ]

Greșeli frecvente

  • Dai unitatea greșit scrisă ("zi", "days ago") și primești RangeError: Invalid unit argument. Unitățile sunt în engleză.

Comenzi înrudite

  • Intl.DateTimeFormat: Un formator de date și ore după regulile unei limbi, refolosibil pentru multe date.
  • getTime / setTime / valueOf: Citește sau setează momentul ca număr de milisecunde de la 1 ianuarie 1970 UTC.
  • Intl.DurationFormat: Formatează o durată (ore, minute, secunde) după regulile unei limbi: „2 ore și 5 minute”.