Learn JavaScript

toLocaleString() - дата и время с учётом локали в JavaScript

toLocaleString() возвращает строку даты и времени с учётом локали. Метод не меняет объект Date, а форматирует значение так, как это принято для выбранного языка и региона.

Синтаксис

Базовая запись выглядит так:

date.toLocaleString()
date.toLocaleString(locales)
date.toLocaleString(locales, options)

Где:

  • date - это объект Date
  • locales - строка с локалью или массив локалей, например "ru-RU" или "en-US"
  • options - объект с настройками форматирования

Что возвращает toLocaleString()

Метод возвращает строку.

Если локаль не указать, результат зависит от настроек среды выполнения: браузера, операционной системы и языка пользователя.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(typeof date.toLocaleString()); // "string"
console.log(date.toLocaleString()); // зависит от локали среды

Из-за этого один и тот же объект даты разные пользователи могут увидеть по-разному.

Простой пример

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toLocaleString("ru-RU")); // "15.01.2025, 14:30:45"
console.log(date.toLocaleString("en-US")); // "1/15/2025, 2:30:45 PM"
console.log(date.toLocaleString("de-DE")); // "15.1.2025, 14:30:45"

Дата и время одни и те же, но формат строки зависит от локали.

toLocaleString() работает по локальному времени

Это главный момент метода.

toLocaleString() показывает дату и время с точки зрения локального часового пояса пользователя, а не по UTC.

const date = new Date("2025-01-15T23:30:00.000Z");

console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"
console.log(date.toLocaleString("ru-RU")); // "16.01.2025, 02:30:00"

По UTC здесь ещё 15 января, но в часовом поясе +03:00 уже 16 января и 02:30. Поэтому локальная строка отличается.

Если в задаче важны дата и время именно по UTC, этот метод не подходит.

Без указания локали результат зависит от системы

Это полезно запомнить.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toLocaleString());

У одного пользователя результат может быть вроде 15.01.2025, 14:30:45, а у другого 1/15/2025, 2:30:45 PM.

Поэтому для предсказуемого вывода обычно лучше явно передавать локаль.

Через options можно настроить формат даты и времени сразу

Это одна из самых полезных возможностей метода.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(
  date.toLocaleString("ru-RU", {
    dateStyle: "long",
    timeStyle: "short",
  })
); // "15 января 2025 г. в 14:30"

В отличие от toLocaleDateString() и toLocaleTimeString(), здесь удобно форматировать и дату, и время одновременно.

Можно задавать отдельные части даты и времени

Если стандартных стилей мало, формат можно собрать вручную.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(
  date.toLocaleString("en-GB", {
    weekday: "long",
    year: "numeric",
    month: "long",
    day: "numeric",
    hour: "2-digit",
    minute: "2-digit",
  })
); // "Wednesday, 15 January 2025 at 14:30"

Важно: точная пунктуация и некоторые служебные слова могут немного отличаться в разных средах.

Можно управлять 12-часовым и 24-часовым форматом

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

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(
  date.toLocaleString("en-US", {
    year: "numeric",
    month: "numeric",
    day: "numeric",
    hour: "numeric",
    minute: "2-digit",
    hour12: true,
  })
); // формат с AM/PM

console.log(
  date.toLocaleString("en-US", {
    year: "numeric",
    month: "numeric",
    day: "numeric",
    hour: "numeric",
    minute: "2-digit",
    hour12: false,
  })
); // формат 24 часа

Параметр hour12 позволяет явно задать нужный стиль вывода времени.

Можно явно выбрать часовой пояс

Это очень практичный сценарий.

По умолчанию toLocaleString() использует локальный часовой пояс пользователя, но через timeZone можно показать дату и время в другой зоне.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(
  date.toLocaleString("ru-RU", {
    dateStyle: "long",
    timeStyle: "short",
    timeZone: "UTC",
  })
); // "15 января 2025 г. в 11:30"

Это удобно, если нужно показывать одно и то же время, например, по UTC или в часовом поясе конкретного города.

toLocaleString() показывает и дату, и время

Это важно не перепутать с соседними методами.

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toLocaleString("ru-RU")); // "15.01.2025, 14:30:45"
console.log(date.toLocaleDateString("ru-RU")); // "15.01.2025"
console.log(date.toLocaleTimeString("ru-RU")); // "14:30:45"

Если нужна только дата или только время, удобнее использовать специализированные методы.

toLocaleString() не меняет исходную дату

Метод только читает текущее значение даты и возвращает строку.

const date = new Date("2025-01-15T14:30:45.123+03:00");
const before = date.getTime();
const result = date.toLocaleString("ru-RU");

console.log(result); // "15.01.2025, 14:30:45"
console.log(date.getTime() === before); // true

После вызова метода сам объект Date остаётся прежним.

Чем toLocaleString() отличается от toISOString()

Это очень важное сравнение.

  • toLocaleString() возвращает дату и время по локальному времени и в формате выбранной локали
  • toISOString() возвращает полную дату и время по UTC в стандартизированном формате
const date = new Date("2025-01-15T23:30:00.000Z");

console.log(date.toLocaleString("ru-RU")); // "16.01.2025, 02:30:00"
console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"

Для API, баз данных и обмена между системами чаще используют toISOString(), а toLocaleString() больше подходит для вывода даты и времени пользователю.

Чем toLocaleString() отличается от toString()

Оба метода возвращают строку, но работают по-разному.

  • toLocaleString() учитывает локаль и умеет настраивать формат
  • toString() возвращает строку в фиксированном стиле среды без тонкой настройки
const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toLocaleString("ru-RU")); // "15.01.2025, 14:30:45"
console.log(date.toString()); // строка в стандартном локальном стиле среды

Если нужен вывод, который лучше подходит под язык и регион пользователя, обычно выбирают toLocaleString().

dateStyle и timeStyle нельзя смешивать с отдельными частями формата

Это важный нюанс.

Если вы используете dateStyle или timeStyle, нельзя одновременно передавать параметры вроде year, month, day, hour или minute.

const date = new Date();

date.toLocaleString("ru-RU", {
  dateStyle: "long",
  year: "numeric",
}); // TypeError

Нужно выбрать один подход: либо готовые стили, либо ручную сборку формата.

Невалидная локаль или часовой пояс вызывают ошибку

Это тоже важно учитывать, если значения приходят извне.

const date = new Date();

date.toLocaleString("bad_tag"); // RangeError
date.toLocaleString("ru-RU", { timeZone: "ASDF/Zone" }); // RangeError

Если локаль или часовой пояс могут быть некорректными, лучше заранее проверять их или использовать безопасные значения по умолчанию.

Invalid Date не вызывает ошибку

Если сам объект даты невалидный, метод не выбрасывает исключение, а возвращает строку "Invalid Date".

const date = new Date("invalid");

console.log(date.toLocaleString()); // "Invalid Date"

Это поведение отличается от ситуаций с некорректной локалью, часовым поясом или неподходящими опциями.

Когда это полезно

toLocaleString() особенно удобен, когда:

  • нужно показать пользователю дату и время в привычном для него формате
  • интерфейс поддерживает несколько языков и регионов
  • важно красиво оформить и дату, и время одной строкой
  • нужно явно выбрать часовой пояс через timeZone

Пример:

const meetingAt = new Date("2025-01-15T14:30:45.123+03:00");

console.log(
  `Встреча: ${meetingAt.toLocaleString("ru-RU", {
    dateStyle: "long",
    timeStyle: "short",
  })}`
);

Частые ошибки

Не указывать локаль и ожидать одинаковый результат у всех

const date = new Date("2025-01-15T14:30:45.123+03:00");

console.log(date.toLocaleString());

Формат зависит от среды пользователя, поэтому результат может отличаться.

Ожидать дату и время по UTC, а не по локальному времени

const date = new Date("2025-01-15T23:30:00.000Z");

console.log(date.toLocaleString("ru-RU")); // "16.01.2025, 02:30:00"

Метод использует локальный часовой пояс пользователя, если явно не передать другой через timeZone.

Путать toLocaleString() и toISOString()

const date = new Date("2025-01-15T23:30:00.000Z");

console.log(date.toLocaleString("ru-RU")); // локальная дата и время
console.log(date.toISOString()); // дата и время по UTC

Это методы для разных задач.

Смешивать dateStyle и timeStyle с year, month, day и другими частями

const date = new Date();

date.toLocaleString("ru-RU", {
  dateStyle: "long",
  year: "numeric",
}); // TypeError

Нужно выбрать один способ настройки формата.

Игнорировать возможную ошибку у невалидной локали или часового пояса

const date = new Date();

date.toLocaleString("bad_tag"); // RangeError
date.toLocaleString("ru-RU", { timeZone: "ASDF/Zone" }); // RangeError

Если значения приходят от пользователя или из настроек, их полезно проверять.

Думать, что метод меняет сам объект Date

const date = new Date("2025-01-15T14:30:45.123+03:00");

date.toLocaleString("ru-RU");

console.log(date.getHours()); // 14

Метод только возвращает строку и не меняет дату.

Быстрая памятка

  • toLocaleString() вызывается у объекта Date
  • метод возвращает строку
  • строка форматируется с учётом локали
  • без locales результат зависит от среды пользователя
  • метод по умолчанию работает по локальному времени
  • через options можно настроить и дату, и время одновременно
  • через timeZone можно явно выбрать часовой пояс
  • toLocaleString() не изменяет исходный объект Date
  • у Invalid Date результатом будет строка "Invalid Date"
  • невалидная локаль и невалидный timeZone дают RangeError
  • dateStyle и timeStyle нельзя смешивать с отдельными полями вроде year и hour

Коротко

toLocaleString() в JavaScript нужен, чтобы получить строку даты и времени в формате, привычном для конкретной локали. Главное, что стоит запомнить: метод работает с локалью и часовым поясом, умеет форматировать дату и время вместе, не меняет исходный объект Date и лучше всего подходит именно для пользовательского отображения.