ToLocaleDateString: примеры (JAVASCRIPT)
toLocaleDateString([locales, options]: Object): StringОписание функции toLocaleDateString
Метод toLocaleDateString() возвращает строку с языко-зависимым представлением части даты объекта Date. Он является частью стандарта ECMAScript Internationalization API и позволяет форматировать дату согласно региональным настройкам пользователя.
Функция обычно применяется для отображения дат в интерфейсах, где важна локализация, например, в интернациональных веб-приложениях.
Аргументы
Функция принимает два необязательных параметра:
- locales: строка или массив строк с тегами языков (например, 'ru-RU', 'en-US'). Этот параметр определяет язык и региональные настройки для форматирования.
- options: объект с настройками форматирования, который может включать следующие свойства:
- weekday: 'narrow', 'short', 'long' (день недели)
- year: 'numeric', '2-digit' (год)
- month: 'numeric', '2-digit', 'narrow', 'short', 'long' (месяц)
- day: 'numeric', '2-digit' (день)
- timeZone: строка с идентификатором часового пояса
- timeZoneName: 'short', 'long' (название часового пояса)
- era: 'narrow', 'short', 'long' (эра)
- formatMatcher: 'basic', 'best fit' (алгоритм сопоставления)
Возвращаемое значение
Строка, представляющая часть даты в соответствии с переданными параметрами локали и опциями. Если параметры не указаны, используются локальные настройки по умолчанию и базовый формат даты.
Базовые примеры использования
Форматирование даты для разных локалей:
const date = new Date('2023-12-25');
console.log(date.toLocaleDateString('ru-RU'));
console.log(date.toLocaleDateString('en-US'));
console.log(date.toLocaleDateString('de-DE'));25.12.2023 12/25/2023 25.12.2023
Использование объекта options:
const date = new Date('2023-12-25');
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
console.log(date.toLocaleDateString('ru-RU', options));понедельник, 25 декабря 2023 г.
Сокращенные форматы:
const date = new Date('2023-12-25');
const options = { weekday: 'short', year: '2-digit', month: 'short', day: 'numeric' };
console.log(date.toLocaleDateString('en-GB', options));Mon, 25 Dec 23
Альтернативные функции в JavaScript
Для форматирования дат в JavaScript доступны несколько методов:
- toDateString(): возвращает читаемую строку с датой на английском, без возможности локализации.
- Intl.DateTimeFormat: более гибкая и производительная альтернатива для множественного форматирования. Создает объект форматера, который можно повторно использовать.
- toISOString(): возвращает дату в формате ISO 8601 (например, '2023-12-25T00:00:00.000Z'), что полезно для передачи данных.
Метод toLocaleDateString предпочтителен для разовых преобразований в интерфейсе, в то время как Intl.DateTimeFormat лучше подходит для частого форматирования одинаковых паттернов.
Типичные ошибки
Некорректная передача параметров локали:
const date = new Date();
console.log(date.toLocaleDateString('русский'));RangeError: Invalid language tag: русский
Использование несуществующих опций:
const date = new Date();
const options = { months: 'long' };
console.log(date.toLocaleDateString('ru-RU', options));25.12.2023 (опция проигнорирована)
Проблемы с часовыми поясами:
const date = new Date('2023-12-25T23:00:00Z');
console.log(date.toLocaleDateString('ru-RU', { timeZone: 'UTC' }));
console.log(date.toLocaleDateString('ru-RU', { timeZone: 'Europe/Moscow' }));26.12.2023 26.12.2023
Изменения в последних версиях
В спецификации ECMAScript 2023 были добавлены новые возможности:
- Поддержка календарей: возможность указания календарной системы через опцию 'calendar' (например, 'hebrew', 'islamic').
- Расширенные опции нумерации: добавлены варианты нумерации через 'numberingSystem'.
- Улучшенная обработка часовых поясов: более точное соответствие базы данных IANA.
Пример с календарем:
const date = new Date();
const options = { calendar: 'hebrew', month: 'long', year: 'numeric' };
console.log(date.toLocaleDateString('ru-RU', options));Расширенные примеры
Форматирование с эрой:
const date = new Date('2023-12-25');
const options = { era: 'short', year: 'numeric', month: 'long' };
console.log(date.toLocaleDateString('ja-JP', options));令和5年12月
Использование нескольких локалей с fallback:
const date = new Date();
console.log(date.toLocaleDateString(['fr-CH', 'fr-FR', 'de-DE'],
{ weekday: 'long', year: 'numeric' }));Кастомный порядок компонентов даты:
const date = new Date('2023-12-25');
const options = {
year: 'numeric',
month: 'short',
day: '2-digit',
weekday: 'short'
};
console.log(date.toLocaleDateString('ru-RU', options));пн, 25 дек. 2023 г.
Форматирование диапазона дат:
const start = new Date('2023-01-01');
const end = new Date('2023-12-31');
const format = new Intl.DateTimeFormat('ru-RU',
{ month: 'long', day: 'numeric' });
console.log(`${format.format(start)} – ${format.format(end)}`);1 января – 31 декабря
Аналоги функции в других языках
Различные языки программирования предоставляют собственные методы локализации дат:
Python
from datetime import datetime
from locale import setlocale, LC_TIME
setlocale(LC_TIME, 'ru_RU.UTF-8')
date = datetime(2023, 12, 25)
print(date.strftime('%A, %d %B %Y'))понедельник, 25 декабря 2023
PHP
$date = new DateTime('2023-12-25');
setlocale(LC_TIME, 'ru_RU.UTF-8');
echo strftime('%A, %d %B %Y', $date->getTimestamp());понедельник, 25 декабря 2023
MySQL
SELECT DATE_FORMAT('2023-12-25', '%W, %d %M %Y');Monday, 25 December 2023
Основное отличие JavaScript-функции - ее встроенная поддержка интернационализации без необходимости явной установки локали системы.