toLocaleTimeString() возвращает строку времени с учётом локали. Метод не меняет объект Date, а форматирует время так, как это принято для выбранного языка и региона.
Синтаксис
Базовая запись выглядит так:
date.toLocaleTimeString()
date.toLocaleTimeString(locales)
date.toLocaleTimeString(locales, options)
Где:
date- это объектDatelocales- строка с локалью или массив локалей, например"ru-RU"или"en-US"options- объект с настройками форматирования
Что возвращает toLocaleTimeString()
Метод возвращает строку.
Если локаль не указать, результат зависит от настроек среды выполнения: браузера, операционной системы и языка пользователя.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(typeof date.toLocaleTimeString()); // "string"
console.log(date.toLocaleTimeString()); // зависит от локали среды
Из-за этого одно и то же время разные пользователи могут увидеть в разном формате.
Простой пример
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString("ru-RU")); // "14:30:45"
console.log(date.toLocaleTimeString("en-US")); // "2:30:45 PM"
console.log(date.toLocaleTimeString("de-DE")); // "14:30:45"
Время одно и то же, но формат строки зависит от локали.
toLocaleTimeString() работает по локальному времени
Это главный момент метода.
toLocaleTimeString() показывает время с точки зрения локального часового пояса пользователя, а не по UTC.
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"
console.log(date.toLocaleTimeString("ru-RU")); // "02:30:00"
По UTC здесь ещё 23:30, но в часовом поясе +03:00 уже 02:30 следующего дня. Поэтому локальное время отличается.
Если в задаче важны часы, минуты и секунды именно по UTC, этот метод не подходит.
Без указания локали результат зависит от системы
Это полезно помнить.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString());
У одного пользователя результат может быть вроде 14:30:45, а у другого 2:30:45 PM.
Поэтому для предсказуемого вывода обычно лучше явно передавать локаль.
Через options можно настраивать формат
Это одна из самых полезных возможностей метода.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
date.toLocaleTimeString("ru-RU", {
hour: "2-digit",
minute: "2-digit",
})
); // "14:30"
Так удобно показывать только часы и минуты без секунд.
Можно управлять 12-часовым и 24-часовым форматом
Это особенно полезно для англоязычных интерфейсов.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
date.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "2-digit",
hour12: true,
})
); // "2:30 PM"
console.log(
date.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "2-digit",
hour12: false,
})
); // "14:30"
Параметр hour12 позволяет явно задать нужный стиль вывода.
Можно использовать timeStyle
Это удобный способ быстро выбрать готовый формат времени.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString("ru-RU", { timeStyle: "short" })); // "14:30"
console.log(date.toLocaleTimeString("ru-RU", { timeStyle: "medium" })); // "14:30:45"
Такой вариант удобен, когда не хочется задавать hour, minute и second по отдельности.
При необходимости можно добавить часовой пояс
По умолчанию toLocaleTimeString() обычно не показывает название или сокращение часового пояса, но это можно включить через options.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
date.toLocaleTimeString("ru-RU", {
hour: "2-digit",
minute: "2-digit",
timeZoneName: "short",
})
); // "14:30 GMT+3"
Это полезно, если важно явно показать пользователю, в каком часовом поясе отображается время.
toLocaleTimeString() не показывает дату
Это важно не перепутать.
Метод не удаляет дату из объекта Date, а просто не включает её в результат.
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString("ru-RU")); // "14:30:45"
console.log(date.getFullYear()); // 2025
console.log(date.getMonth()); // 0
console.log(date.getDate()); // 15
Дата у объекта остаётся, просто строка её не показывает.
toLocaleTimeString() не меняет исходную дату
Метод только читает текущее значение даты и возвращает строку.
const date = new Date("2025-01-15T14:30:45.123+03:00");
const before = date.getTime();
const result = date.toLocaleTimeString("ru-RU");
console.log(result); // "14:30:45"
console.log(date.getTime() === before); // true
После вызова метода сам объект Date остаётся прежним.
Чем toLocaleTimeString() отличается от toTimeString()
Эти методы похожи по смыслу, но дают разный результат.
toLocaleTimeString()учитывает локаль и позволяет настраивать форматtoTimeString()возвращает строку в фиксированном стиле без настройки локали
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString("ru-RU")); // "14:30:45"
console.log(date.toTimeString()); // "14:30:45 GMT+0300 (Moscow Standard Time)"
Если нужно время в формате, привычном пользователю из конкретной страны, обычно лучше подходит toLocaleTimeString().
Чем toLocaleTimeString() отличается от toISOString()
Это очень важное сравнение.
toLocaleTimeString()возвращает только время по локальному времениtoISOString()возвращает полную дату и время поUTC
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toLocaleTimeString("ru-RU")); // "02:30:00"
console.log(date.toISOString()); // "2025-01-15T23:30:00.000Z"
Для API, баз данных и обмена между системами чаще используют toISOString(), а toLocaleTimeString() больше подходит для вывода времени пользователю.
Для даты этот метод не подходит
Здесь часто путаются.
toLocaleTimeString() форматирует именно время. Если попытаться использовать dateStyle, JavaScript выбросит ошибку.
const date = new Date();
date.toLocaleTimeString("ru-RU", {
dateStyle: "long",
}); // TypeError
Если нужен вывод даты, обычно используют toLocaleDateString() или toLocaleString().
Невалидная локаль вызывает ошибку
Это тоже важно учитывать, если локаль приходит извне.
const date = new Date();
date.toLocaleTimeString("bad_tag"); // RangeError
Если значение локали может быть некорректным, лучше заранее проверять его или использовать безопасное значение по умолчанию.
Invalid Date не вызывает ошибку
Если сам объект даты невалидный, метод не выбрасывает исключение, а возвращает строку "Invalid Date".
const date = new Date("invalid");
console.log(date.toLocaleTimeString()); // "Invalid Date"
Это поведение отличается от ситуаций с некорректной локалью или неподходящими опциями.
Когда это полезно
toLocaleTimeString() особенно удобен, когда:
- нужно показать время пользователю в привычном для него формате
- интерфейс поддерживает несколько языков и регионов
- важно красиво оформить время без даты
- нужен настраиваемый вывод с секундами, без секунд или с часовым поясом
Пример:
const startedAt = new Date("2025-01-15T14:30:45.123+03:00");
console.log(
`Запуск: ${startedAt.toLocaleTimeString("ru-RU", {
hour: "2-digit",
minute: "2-digit",
})}`
);
Частые ошибки
Не указывать локаль и ожидать одинаковый результат у всех
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString());
Формат зависит от среды пользователя, поэтому результат может отличаться.
Ожидать время по UTC, а не по локальному времени
const date = new Date("2025-01-15T23:30:00.000Z");
console.log(date.toLocaleTimeString("ru-RU")); // "02:30:00"
Метод использует локальный часовой пояс пользователя.
Путать toLocaleTimeString() и toTimeString()
const date = new Date("2025-01-15T14:30:45.123+03:00");
console.log(date.toLocaleTimeString("ru-RU")); // "14:30:45"
console.log(date.toTimeString()); // "14:30:45 GMT+0300 (Moscow Standard Time)"
Один метод локализованный и настраиваемый, другой нет.
Пытаться форматировать дату через toLocaleTimeString()
const date = new Date();
date.toLocaleTimeString("ru-RU", {
dateStyle: "long",
}); // TypeError
Для даты нужны другие методы.
Игнорировать возможную ошибку у невалидной локали
const date = new Date();
date.toLocaleTimeString("bad_tag"); // RangeError
Если локаль приходит от пользователя или из настроек, её полезно проверять.
Думать, что метод меняет сам объект Date
const date = new Date("2025-01-15T14:30:45.123+03:00");
date.toLocaleTimeString("ru-RU");
console.log(date.getHours()); // 14
Метод только возвращает строку и не меняет дату.
Быстрая памятка
toLocaleTimeString()вызывается у объектаDate- метод возвращает строку
- строка форматируется с учётом локали
- без
localesрезультат зависит от среды пользователя - метод работает по локальному времени
- через
optionsможно настроить формат времени - метод не показывает дату
toLocaleTimeString()не изменяет исходный объектDate- у
Invalid Dateрезультатом будет строка"Invalid Date" - невалидная локаль даёт
RangeError dateStyleдля этого метода не подходит и даётTypeError
Коротко
toLocaleTimeString() в JavaScript нужен, чтобы получить строку времени в формате, привычном для конкретной локали. Главное, что стоит запомнить: метод работает по локальному времени, зависит от языка и региона, позволяет настраивать формат через options, не меняет исходный объект Date и лучше всего подходит именно для вывода времени пользователю.