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

Локализованное отображение времени через toLocaleTimeString
Раздел: Дата и время, Форматирование
toLocaleTimeString([locales, options]: Object): String

Основные сведения о toLocaleTimeString

Метод toLocaleTimeString() принадлежит объекту Date в JavaScript и возвращает строку с представлением временной части даты, отформатированной согласно правилам заданной локали. Его применение целесообразно при необходимости отображения времени для пользователей в их региональном формате.

Функция принимает два аргумента: locales и options.

  • locales: необязательный параметр. Может быть строкой с кодом языка (например, 'ru-RU', 'en-US') или массивом таких строк. Определяет язык и региональные настройки для форматирования.
  • options: необязательный объект с настройками. Основные свойства:
    • hour12: логическое значение, определяющее использование 12-часового (true) или 24-часового (false) формата.
    • hour, minute, second: строки ('numeric', '2-digit'), управляющие отображением соответствующих компонентов.
    • timeZone: строка, указывающая часовой пояс (например, 'UTC', 'Europe/Moscow').
    • timeZoneName: строка ('short', 'long' и др.), определяющая отображение названия часового пояса.
    • formatMatcher, localeMatcher: алгоритмы для согласования формата и локали.

Возвращаемое значение — строка, представляющая время в соответствии с переданными настройками. Если параметры не указаны, используется локаль по умолчанию и базовые настройки.

Простые примеры форматирования

Пример с локалью по умолчанию:

const date = new Date('2023-12-25T14:30:45');
console.log(date.toLocaleTimeString());
// Результат зависит от локали системы, например: '14:30:45'

Пример с явным указанием локали:

console.log(date.toLocaleTimeString('ru-RU'));
'14:30:45'

Пример с 12-часовым форматом:

console.log(date.toLocaleTimeString('en-US', { hour12: true }));
'2:30:45 PM'

Пример с отображением только часов и минут:

console.log(date.toLocaleTimeString('ru-RU', { 
  hour: '2-digit', 
  minute: '2-digit'
}));
'14:30'

Пример с названием часового пояса:

console.log(date.toLocaleTimeString('ru-RU', {
  timeZoneName: 'short'
}));
'14:30:45 GMT+3'

Похожие методы JavaScript

В JavaScript существуют другие методы для локализованного форматирования даты и времени.

  • toLocaleDateString(): форматирует только дату (день, месяц, год), игнорируя время. Используется, когда временная часть не нужна.
  • toLocaleString(): форматирует полную дату и время. Подходит для отображения и даты, и времени вместе.
  • Intl.DateTimeFormat: объект конструктора для более сложного и производительного форматирования, когда один стиль применяется к множеству дат. Предпочтителен в циклах.

Выбор метода зависит от задачи: для времени — toLocaleTimeString, для даты — toLocaleDateString, для комплексного отображения — toLocaleString или Intl.DateTimeFormat.

Возможные ошибки применения

Ошибка использования метода для невалидной даты:

const invalidDate = new Date('не дата');
console.log(invalidDate.toLocaleTimeString('ru-RU'));
'Invalid Date'

Ошибка передачи несуществующего кода локали может привести к использованию локали по умолчанию, а не к выбросу исключения:

console.log(date.toLocaleTimeString('xx-XX'));
// Форматирование по умолчанию, например: '14:30:45'

Ошибка несовместимых опций. Некоторые комбинации параметров могут игнорироваться браузером:

console.log(date.toLocaleTimeString('ru-RU', { 
  hour: 'numeric', 
  hour12: false, // Может быть проигнорировано для локали 'ru-RU',
  timeZone: 'Mars/Base' // Неверная зона
}));
// Результат зависит от реализации, например: '14:30:45'

Обновления в спецификации

Наиболее значимые изменения связаны с расширением стандарта ECMAScript Internationalization API (ECMA-402).

  • В более поздних версиях добавлена поддержка новых значений для опций, таких как fractionalSecondDigits для отображения миллисекунд.
  • Улучшена обработка часовых поясов и календарных систем.
  • Расширен список доступных локалей и их вариантов.

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

Специальные примеры использования

Форматирование с миллисекундами:

Пример javascript
const dateWithMs = new Date('2023-12-25T14:30:45.123');
console.log(dateWithMs.toLocaleTimeString('en-US', {
  fractionalSecondDigits: 3
}));
'2:30:45.123 PM'

Использование нескольких локалей с fallback:

Пример javascript
console.log(date.toLocaleTimeString(['de-DE', 'ru-RU', 'en-US']));
// Используется первая поддерживаемая локаль

Форматирование в часовом поясе UTC:

Пример javascript
console.log(date.toLocaleTimeString('en-US', {
  timeZone: 'UTC',
  hour12: false
}));
'11:30:45'

Кастомизация с полным названием часового пояса:

Пример javascript
console.log(date.toLocaleTimeString('ru-RU', {
  timeZoneName: 'longOffset'
}));
'14:30:45 Московское время (стандартное)'

Форматирование только секунд (нестандартный вариант):

Пример javascript
console.log(date.toLocaleTimeString('ru-RU', {
  hour: undefined,
  minute: undefined,
  second: '2-digit'
}));
'45'

Совместное использование с Intl.DateTimeFormat для многократного применения формата:

Пример javascript
const formatter = new Intl.DateTimeFormat('ru-RU', {
  hour: '2-digit',
  minute: '2-digit',
  timeZone: 'Europe/Samara'
});
console.log(formatter.format(date));
'16:30'

Форматирование времени в других языках

В других языках программирования существуют аналогичные функции для локализованного форматирования времени.

Пример в PHP с использованием класса IntlDateFormatter:

$date = new DateTime('2023-12-25 14:30:45');
$formatter = new IntlDateFormatter(
    'ru_RU', 
    IntlDateFormatter::NONE, 
    IntlDateFormatter::MEDIUM
);
echo $formatter->format($date);
'14:30:45'

Пример в Python с модулем locale и strftime:

import locale
from datetime import datetime
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
date = datetime(2023, 12, 25, 14, 30, 45)
print(date.strftime('%X'))
'14:30:45'

Пример в MySQL с функцией DATE_FORMAT:

SELECT DATE_FORMAT('2023-12-25 14:30:45', '%T') AS time;
'14:30:45'

Отличия заключаются в синтаксисе, поддержке локалей и гибкости настроек. В JavaScript метод встроен в объект Date, в то время как в PHP и Python часто требуется использование специальных классов или модулей.

JS toLocaleTimeString function comments

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