Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Форматирование: 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

Храните и вычисляйте обычные числа и даты, а форматируйте в самом конце — перед выводом на экран.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.