toLocaleDateString() возвращает строку даты с учётом локали. Метод не меняет объект Date, а форматирует дату так, как это принято для выбранного языка и региона.
Синтаксис
Базовая запись выглядит так:
date.toLocaleDateString()
date.toLocaleDateString(locales)
date.toLocaleDateString(locales, options)
Где:
date- это объектDatelocales- строка с локалью или массив локалей, например"ru-RU"или"en-US"options- объект с настройками форматирования
Что возвращает toLocaleDateString()
Метод возвращает строку.
Если локаль не указать, результат зависит от настроек среды выполнения: браузера, операционной системы и языка пользователя.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(typeof date.toLocaleDateString()); // "string"
console.log(date.toLocaleDateString()); // зависит от локали среды
Из-за этого одну и ту же дату разные пользователи могут увидеть по-разному.
Простой пример
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString("ru-RU")); // "15.01.2025"
console.log(date.toLocaleDateString("en-US")); // "1/15/2025"
console.log(date.toLocaleDateString("de-DE")); // "15.1.2025"
Дата одна и та же, но формат строки зависит от локали.
toLocaleDateString() работает по локальному времени
Это главный момент метода.
toLocaleDateString() показывает дату с точки зрения локального часового пояса пользователя, а не по UTC.
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"
console.log(date.toLocaleDateString("ru-RU")); // "16.01.2025"
По UTC здесь ещё 15 января, но в часовом поясе +03:00 уже 16 января. Поэтому итоговая локальная дата меняется.
Если в задаче важна дата именно по UTC, toLocaleDateString() для этого не подходит.
Без указания локали результат зависит от системы
Это полезно запомнить.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString());
У одного пользователя результат может быть вроде 15.01.2025, у другого 1/15/2025, а у третьего ещё в другом формате.
Поэтому для предсказуемого вывода обычно лучше явно передавать локаль.
Через options можно настраивать формат
Это одна из самых полезных возможностей метода.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
date.toLocaleDateString("ru-RU", {
year: "numeric",
month: "long",
day: "numeric",
})
); // "15 января 2025 г."
Так можно получить более человекочитаемую дату.
Можно добавить день недели
Это тоже часто полезно.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
date.toLocaleDateString("en-GB", {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric",
})
); // "Wednesday, 15 January 2025"
Настройки weekday, day, month и year позволяют гибко управлять итоговым видом строки.
toLocaleDateString() не показывает время
Это важно не перепутать.
Метод не удаляет время из объекта Date, а просто не включает его в результат.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString("ru-RU")); // "15.01.2025"
console.log(date.getHours()); // 14
console.log(date.getMinutes()); // 30
Время у объекта осталось, просто строка его не показывает.
toLocaleDateString() не меняет исходную дату
Метод только читает текущее значение даты и возвращает строку.
const date = new Date("2025-01-15T14:30:45.123+03:00");
const before = date.getTime();
const result = date.toLocaleDateString("ru-RU");
console.log(result); // "15.01.2025"
console.log(date.getTime() === before); // true
После вызова метода сам объект Date остаётся прежним.
Чем toLocaleDateString() отличается от toDateString()
Эти методы похожи по смыслу, но дают разный результат.
toLocaleDateString()учитывает локаль и позволяет настраивать форматtoDateString()возвращает строку в фиксированном стиле без настройки локали
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString("ru-RU")); // "15.01.2025"
console.log(date.toDateString()); // "Wed Jan 15 2025"
Если нужна дата в формате, понятном пользователю из конкретной страны, обычно лучше подходит toLocaleDateString().
Чем toLocaleDateString() отличается от toISOString()
Это очень важное сравнение.
toLocaleDateString()возвращает только дату по локальному времениtoISOString()возвращает полную дату и время поUTC
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toLocaleDateString("ru-RU")); // "16.01.2025"
console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"
Для API, баз данных и обмена между системами чаще используют toISOString(), а toLocaleDateString() больше подходит для вывода даты пользователю.
Для времени этот метод не подходит
Это частая точка путаницы.
toLocaleDateString() форматирует именно дату. Если попытаться использовать timeStyle, JavaScript выбросит ошибку.
const date = new Date();
date.toLocaleDateString("ru-RU", {
timeStyle: "short",
}); // TypeError
Если нужен вывод времени, обычно используют toLocaleTimeString() или toLocaleString().
Невалидная локаль вызывает ошибку
Это тоже важно учитывать, если локаль приходит извне.
const date = new Date();
date.toLocaleDateString("bad_tag"); // RangeError
Если значение локали может быть некорректным, лучше заранее проверять его или использовать безопасное значение по умолчанию.
Invalid Date не вызывает ошибку
Если сам объект даты невалидный, метод не выбрасывает исключение, а возвращает строку "Invalid Date".
const date = new Date("invalid");
console.log(date.toLocaleDateString()); // "Invalid Date"
Это поведение отличается от ситуаций с некорректной локалью или неподходящими опциями.
Когда это полезно
toLocaleDateString() особенно удобен, когда:
- нужно показать дату пользователю в привычном для него формате
- интерфейс поддерживает несколько языков и регионов
- важно красиво оформить дату без времени
- нужен настраиваемый вывод с месяцем словами или днём недели
Пример:
const publishedAt = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
`Опубликовано: ${publishedAt.toLocaleDateString("ru-RU", {
day: "numeric",
month: "long",
year: "numeric",
})}`
);
Частые ошибки
Не указывать локаль и ожидать одинаковый результат у всех
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString());
Формат зависит от среды пользователя, поэтому результат может отличаться.
Ожидать дату по UTC, а не по локальному времени
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toLocaleDateString("ru-RU")); // "16.01.2025"
Метод использует локальный часовой пояс пользователя.
Путать toLocaleDateString() и toDateString()
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleDateString("ru-RU")); // "15.01.2025"
console.log(date.toDateString()); // "Wed Jan 15 2025"
Один метод локализованный и настраиваемый, другой нет.
Пытаться форматировать время через toLocaleDateString()
const date = new Date();
date.toLocaleDateString("ru-RU", {
timeStyle: "short",
}); // TypeError
Для времени нужны другие методы.
Игнорировать возможную ошибку у невалидной локали
const date = new Date();
date.toLocaleDateString("bad_tag"); // RangeError
Если локаль приходит от пользователя или из настроек, её полезно проверять.
Думать, что метод меняет сам объект Date
const date = new Date("2025-01-15T14:30:45.123+03:00");
date.toLocaleDateString("ru-RU");
console.log(date.getHours()); // 14
Метод только возвращает строку и не меняет дату.
Быстрая памятка
toLocaleDateString()вызывается у объектаDate- метод возвращает строку
- строка форматируется с учётом локали
- без
localesрезультат зависит от среды пользователя - метод работает по локальному времени
- через
optionsможно настроить формат даты - метод не показывает время
toLocaleDateString()не изменяет исходный объектDate- у
Invalid Dateрезультатом будет строка"Invalid Date" - невалидная локаль даёт
RangeError timeStyleдля этого метода не подходит и даётTypeError
Коротко
toLocaleDateString() в JavaScript нужен, чтобы получить строку даты в формате, привычном для конкретной локали. Главное, что стоит запомнить: метод работает по локальному времени, зависит от языка и региона, позволяет настраивать формат через options, не меняет исходный объект Date и лучше всего подходит именно для вывода даты пользователю.