ToLocaleDateString: примеры (JAVASCRIPT)

Функция toLocaleDateString для работы с датами в JavaScript
Раздел: Дата и время, Форматирование
toLocaleDateString([locales, options]: Object): String

Описание функции toLocaleDateString

Метод toLocaleDateString() возвращает строку с языко-зависимым представлением части даты объекта Date. Он является частью стандарта ECMAScript Internationalization API и позволяет форматировать дату согласно региональным настройкам пользователя.

Функция обычно применяется для отображения дат в интерфейсах, где важна локализация, например, в интернациональных веб-приложениях.

Аргументы

Функция принимает два необязательных параметра:

  1. locales: строка или массив строк с тегами языков (например, 'ru-RU', 'en-US'). Этот параметр определяет язык и региональные настройки для форматирования.
  2. 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));

Расширенные примеры

Форматирование с эрой:

Пример javascript
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:

Пример javascript
const date = new Date();
console.log(date.toLocaleDateString(['fr-CH', 'fr-FR', 'de-DE'], 
  { weekday: 'long', year: 'numeric' }));

Кастомный порядок компонентов даты:

Пример javascript
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 г.

Форматирование диапазона дат:

Пример javascript
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-функции - ее встроенная поддержка интернационализации без необходимости явной установки локали системы.

JS toLocaleDateString function comments

En
ToLocaleDateString Returns a string with a language-sensitive representation of the date portion of this date