Как отобразить миллисекунды или микросекунды во времени?

Используйте 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-часовой формат, часовые пояса и различные локали. Десятичный разделитель для долей секунды остается неизменным во всех локалях.

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