Как отобразить миллисекунды или микросекунды во времени?
Используйте Intl.DateTimeFormat для отображения долей секунды во времени
Введение
Большинство отображений времени показывают часы, минуты и секунды. Такая точность подходит для расписаний, встреч и повседневного учета времени. Однако некоторые приложения требуют точности меньше секунды для отображения десятых, сотых или тысячных долей секунды.
Инструменты мониторинга производительности отображают время отклика в миллисекундах. Научные приложения показывают измерения с точностью до долей секунды. Видео- и аудиоприложения отображают временные метки с точностью до миллисекунды. Системы логирования фиксируют события с временными метками, содержащими доли секунды, чтобы различать события, происходящие с минимальным интервалом.
Intl.DateTimeFormat в JavaScript предоставляет опцию fractionalSecondDigits для отображения времени с точностью до долей секунды. В этом уроке объясняется, что такое доли секунды, как их отображать и когда требуется такая точность.
Понимание точности долей секунды
Секунда — это базовая единица измерения времени. Доли секунды представляют части секунды, меньшие одной целой секунды.
Одна десятая секунды равна 0,1 секунды, что эквивалентно 100 миллисекундам. Такая точность позволяет различать события, происходящие с интервалом в одну десятую секунды.
Одна сотая секунды равна 0,01 секунды, что эквивалентно 10 миллисекундам. Такая точность позволяет различать события, происходящие с интервалом в одну сотую секунды.
Одна тысячная секунды равна 0,001 секунды, что эквивалентно 1 миллисекунде. Это максимальная точность, поддерживаемая Intl.DateTimeFormat.
JavaScript представляет доли секунды в виде цифр после десятичной точки. Одна цифра показывает десятые доли, две цифры — сотые, а три цифры — тысячные доли секунды.
О микросекундах
В заголовке урока упоминаются микросекунды, но Intl.DateTimeFormat не поддерживает точность до микросекунд. Микросекунды представляют миллионные доли секунды и требуют шести цифр после десятичной точки. API поддерживает максимум три цифры, что обеспечивает точность до миллисекунд.
Объекты Date в JavaScript внутренне хранят время в миллисекундах с 1 января 1970 года по UTC. Это означает, что исходные данные поддерживают точность до миллисекунд, но не до микросекунд.
Использование опции fractionalSecondDigits
Опция fractionalSecondDigits управляет количеством цифр после десятичной точки в поле секунд. Она принимает значения 1, 2 или 3.
Вы должны включить опцию second при использовании fractionalSecondDigits. Без опции second форматировщик полностью исключает поле секунд, и опция дробных секунд не оказывает никакого эффекта.
const date = new Date('2025-10-15T14:23:45.678');
const formatter = new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3
});
console.log(formatter.format(date));
// Вывод: "2:23:45.678 PM"
Этот форматировщик отображает часы, минуты, секунды и три цифры дробных секунд. Объект Date содержит точность до миллисекунд, и форматировщик отображает все три цифры.
Отображение одной цифры дробных секунд
Установка fractionalSecondDigits в 1 отображает десятые доли секунды.
const date = new Date('2025-10-15T14:23:45.678');
const formatter = new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 1
});
console.log(formatter.format(date));
// Вывод: "2:23:45.6 PM"
Форматировщик округляет значение до одного десятичного знака. Исходное значение содержит 678 миллисекунд, что равно 0.678 секунды, которое округляется до 0.6 секунды при отображении с одной цифрой.
Отображение двух цифр дробных секунд
Установка fractionalSecondDigits в 2 отображает сотые доли секунды.
const date = new Date('2025-10-15T14:23:45.678');
const formatter = new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 2
});
console.log(formatter.format(date));
// Вывод: "2:23:45.67 PM"
Форматировщик округляет значение до двух десятичных знаков. Значение 678 миллисекунд равно 0.678 секунды, которое округляется до 0.67 секунды при отображении с двумя цифрами.
Отображение трех цифр дробных секунд
Установка fractionalSecondDigits в значение 3 отображает тысячные доли секунды, что соответствует миллисекундам.
const date = new Date('2025-10-15T14:23:45.678');
const formatter = new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3
});
console.log(formatter.format(date));
// Вывод: "2:23:45.678 PM"
Это отображает полную точность миллисекунд, доступную в объектах Date в JavaScript. Три цифры — это максимальная точность, поддерживаемая Intl.DateTimeFormat.
Совмещение с 24-часовым форматом времени
Доли секунды работают с любыми параметрами форматирования времени, включая 24-часовой формат.
const date = new Date('2025-10-15T14:23:45.678');
const formatter = new Intl.DateTimeFormat('en-GB', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 3,
hourCycle: 'h23'
});
console.log(formatter.format(date));
// Вывод: "14:23:45.678"
Британский английский по умолчанию использует 24-часовой формат времени, а параметр hourCycle гарантирует использование 24-часового формата. Доли секунды отображаются после секунд с разделителем в виде точки.
Включение часового пояса с долями секунды
Вы можете отображать доли секунды вместе с информацией о часовом поясе.
const date = new Date('2025-10-15T14:23:45.678Z');
const formatter = new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3,
timeZone: 'America/New_York',
timeZoneName: 'short'
});
console.log(formatter.format(date));
// Вывод: "10:23:45.678 AM EDT"
Этот форматтер преобразует время UTC в время Нью-Йорка и отображает результат с точностью до миллисекунд и сокращением часового пояса.
Как форматируются доли секунды в разных локалях
Разные локали используют разные десятичные разделители для чисел, но доли секунды всегда используют точку в качестве десятичного разделителя во всех локалях.
const date = new Date('2025-10-15T14:23:45.678');
const options = {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
fractionalSecondDigits: 3
};
const en = new Intl.DateTimeFormat('en-US', options);
console.log(en.format(date));
// Вывод: "2:23:45.678 PM"
const de = new Intl.DateTimeFormat('de-DE', options);
console.log(de.format(date));
// Вывод: "14:23:45.678"
const fr = new Intl.DateTimeFormat('fr-FR', options);
console.log(fr.format(date));
// Вывод: "14:23:45.678"
const ar = new Intl.DateTimeFormat('ar-SA', options);
console.log(ar.format(date));
// Вывод: "٢:٢٣:٤٥٫٦٧٨ م"
Английский использует 12-часовой формат с AM/PM. Немецкий и французский используют 24-часовой формат. Арабский использует арабско-индийские цифры, но сохраняет ту же структуру формата времени. Все локали используют точку или аналогичный разделитель для долей секунды.
Основные случаи использования долей секунды
Мониторинг производительности отображает время отклика с точностью до миллисекунд.
const startTime = new Date();
// Выполнение операции
const endTime = new Date();
const formatter = new Intl.DateTimeFormat('en-US', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 3,
hourCycle: 'h23'
});
console.log(`Операция завершена в ${formatter.format(endTime)}`);
// Вывод: "Операция завершена в 14:23:45.678"
Это отображает точное время завершения с миллисекундной точностью для анализа производительности.
Научное ведение данных требует временных меток с долями секунды.
function logMeasurement(value) {
const timestamp = new Date();
const formatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 3,
hourCycle: 'h23'
});
console.log(`${formatter.format(timestamp)} - Измерение: ${value}`);
}
logMeasurement(23.5);
// Вывод: "10/15/2025, 14:23:45.678 - Измерение: 23.5"
Это создает временные метки с миллисекундной точностью для научных измерений.
Таймкоды видеоплеера отображают позицию с точностью до долей секунды.
function formatVideoTimestamp(milliseconds) {
const date = new Date(milliseconds);
const formatter = new Intl.DateTimeFormat('en-US', {
minute: '2-digit',
second: '2-digit',
fractionalSecondDigits: 2,
hourCycle: 'h23',
timeZone: 'UTC'
});
return formatter.format(date);
}
console.log(formatVideoTimestamp(125678));
// Вывод: "02:05.67"
Это форматирует таймкод видео с точностью до сотых долей секунды. Установка часового пояса в UTC предотвращает преобразование часового пояса для значения длительности.
Когда использовать доли секунды
Используйте доли секунды, когда необходимо различать события, происходящие в пределах одной секунды. Мониторинг производительности, отладка, научные измерения и медиа-приложения часто требуют такой точности.
Не используйте доли секунды для повседневного учета времени. Встречи, расписания и временные метки, ориентированные на пользователей, редко нуждаются в точности до долей секунды. Добавление излишней точности делает время трудным для восприятия и понимания.
Выбирайте подходящее количество цифр для ваших нужд. Одна цифра обеспечивает достаточную точность для многих случаев использования, оставаясь при этом читаемой. Три цифры обеспечивают максимальную точность, но создают более длинные и технически выглядящие временные метки.
Резюме
Опция fractionalSecondDigits отображает доли секунды при форматировании времени. Она принимает значения 1, 2 или 3 для отображения десятых, сотых или тысячных долей секунды. Вы должны включить опцию second, если используете fractionalSecondDigits.
Intl.DateTimeFormat в JavaScript поддерживает миллисекундную точность, но не поддерживает микросекундную. Три дробных цифры представляют миллисекунды, что является наивысшей доступной точностью.
Доли секунды работают со всеми другими опциями форматирования времени, включая 12-часовой и 24-часовой формат, часовые пояса и различные локали. Десятичный разделитель для долей секунды остается неизменным во всех локалях.
Используйте доли секунды для мониторинга производительности, научных данных, отладочных журналов и временных меток в медиа. Избегайте использования долей секунды в повседневном учете времени, где достаточно точности до секунды.