Форматирование: Intl
В разных странах одно и то же число и одну дату записывают по-разному: 1,234.5 в США и 1 234,5 в России, 3/8/2026 и 08.03.2026. Встроенный объект Intl (от слова «интернационализация») знает эти правила и форматирует значения так, как привычно читателю.
Числа
Метод toLocaleString() превращает число в строку по правилам указанного языка. Язык задают кодом локали: 'ru-RU' — русский язык в России, 'en-US' — английский в США:
console.log((1234567.891).toLocaleString('ru-RU')); // 1 234 567,891Разряды разделены пробелами, а дробная часть отделена запятой — как принято в русском тексте.
Деньги
Intl.NumberFormat создаёт форматировщик с настройками. Стиль currency добавляет знак валюты и ставит два знака после запятой:
const euro = new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'EUR' });
console.log(euro.format(1234.5)); // 1 234,50 €
console.log(euro.format(7)); // 7,00 €Один форматировщик можно использовать для многих чисел. Код валюты — три буквы: EUR, USD.
Проценты и округление
Стиль percent умножает число на 100 и добавляет знак процента, а maximumFractionDigits ограничивает количество знаков после запятой:
console.log((0.25).toLocaleString('ru-RU', { style: 'percent' })); // 25 %
console.log((3.14159).toLocaleString('ru-RU', { maximumFractionDigits: 1 })); // 3,1Даты
Метод даты toLocaleDateString() выводит дату в привычном виде. Настройки позволяют показать месяц словом, добавить день недели и так далее:
const date = new Date(2026, 2, 8);
console.log(date.toLocaleDateString('ru-RU')); // 08.03.2026
console.log(date.toLocaleDateString('ru-RU', { day: 'numeric', month: 'long', year: 'numeric' })); // 8 марта 2026 г.
console.log(date.toLocaleDateString('ru-RU', { weekday: 'long' })); // воскресеньеДля времени есть toLocaleTimeString(), а Intl.DateTimeFormat работает как NumberFormat: настраивается один раз и форматирует много дат.
Окончания слов
В русском языке слово меняется вместе с числом: 1 товар, 3 товара, 5 товаров. Intl.PluralRules определяет, какая форма нужна. Для русского он возвращает one, few или many:
const rules = new Intl.PluralRules('ru-RU');
const forms = { one: 'товар', few: 'товара', many: 'товаров' };
for (const count of [1, 3, 5, 21]) {
console.log(`${count} ${forms[rules.select(count)]}`);
}
// 1 товар
// 3 товара
// 5 товаров
// 21 товарЧастая ошибка
Отформатированная строка предназначена только для показа человеку. С ней нельзя считать и её нельзя надёжно разобрать обратно: разделители и даже пробелы зависят от языка.
const price = (1234.5).toLocaleString('ru-RU');
console.log(Number(price)); // NaNХраните и вычисляйте обычные числа и даты, а форматируйте в самом конце — перед выводом на экран.