時刻にミリ秒やマイクロ秒を表示するには?

Intl.DateTimeFormatを使用して、時刻表示でサブ秒精度を表示する

はじめに

ほとんどの時刻表示は、時、分、秒を表示します。この精度は、スケジュール、予定、日常的な時間管理に適しています。しかし、一部のアプリケーションでは、秒の10分の1、100分の1、または1000分の1を表示するために、サブ秒精度が必要です。

パフォーマンス監視ツールは、応答時間をミリ秒単位で表示します。科学アプリケーションは、サブ秒精度で測定値を表示します。ビデオおよびオーディオアプリケーションは、ミリ秒単位でタイムスタンプを表示します。ロギングシステムは、密接に間隔を置いたイベントを区別するために、小数秒のタイムスタンプでイベントを記録します。

JavaScriptのIntl.DateTimeFormatは、サブ秒精度を表示するためのfractionalSecondDigitsオプションを提供します。このレッスンでは、小数秒とは何か、それらを表示する方法、およびこのレベルの精度が必要な場合について説明します。

小数秒精度の理解

秒は時間測定の基本単位です。小数秒は、1秒全体よりも小さい秒の部分を表します。

秒の10分の1は0.1秒に等しく、これは100ミリ秒に等しくなります。この精度により、互いに10分の1秒以内に発生するイベントを区別できます。

秒の100分の1は0.01秒に等しく、これは10ミリ秒に等しくなります。この精度により、互いに100分の1秒以内に発生するイベントを区別できます。

秒の1000分の1は0.001秒に等しく、これは1ミリ秒に等しくなります。これはIntl.DateTimeFormatでサポートされる最高精度です。

JavaScriptは、小数秒を小数点以下の数字として表します。1桁は10分の1を示し、2桁は100分の1を示し、3桁は1000分の1を示します。

マイクロ秒について

レッスンのタイトルではマイクロ秒について言及していますが、Intl.DateTimeFormatはマイクロ秒の精度をサポートしていません。マイクロ秒は100万分の1秒を表し、小数点以下6桁が必要になります。このAPIは最大3桁までサポートしており、ミリ秒の精度を提供します。

JavaScript Dateオブジェクトは、内部的に1970年1月1日UTCからのミリ秒として時刻を保存しています。つまり、基礎となるデータはミリ秒の精度をサポートしていますが、マイクロ秒の精度はサポートしていません。

fractionalSecondDigitsオプションの使用

fractionalSecondDigitsオプションは、秒フィールドの小数点以下に表示される桁数を制御します。1、2、または3の値を受け入れます。

fractionalSecondDigitsを使用する場合は、secondオプションを含める必要があります。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));
// Output: "2:23:45.678 PM"

このフォーマッターは、時、分、秒、および3桁の小数秒を表示します。Dateオブジェクトにはミリ秒の精度が含まれており、フォーマッターは3桁すべてを表示します。

小数秒を1桁表示

fractionalSecondDigitsを1に設定すると、秒の10分の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));
// Output: "2:23:45.6 PM"

フォーマッターは値を小数第1位に丸めます。元の値には678ミリ秒が含まれており、これは0.678秒に相当し、1桁で表示する場合は0.6秒に切り捨てられます。

小数秒を2桁表示

fractionalSecondDigitsを2に設定すると、秒の100分の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: 2
});

console.log(formatter.format(date));
// Output: "2:23:45.67 PM"

フォーマッターは値を小数第2位に丸めます。678ミリ秒の値は0.678秒に相当し、2桁で表示する場合は0.67秒に切り捨てられます。

小数点以下3桁の秒を表示する

fractionalSecondDigitsを3に設定すると、1000分の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: 3
});

console.log(formatter.format(date));
// Output: "2:23:45.678 PM"

これにより、JavaScript Dateオブジェクトで利用可能な完全なミリ秒精度が表示されます。3桁は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));
// Output: "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));
// Output: "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));
// Output: "2:23:45.678 PM"

const de = new Intl.DateTimeFormat('de-DE', options);
console.log(de.format(date));
// Output: "14:23:45.678"

const fr = new Intl.DateTimeFormat('fr-FR', options);
console.log(fr.format(date));
// Output: "14:23:45.678"

const ar = new Intl.DateTimeFormat('ar-SA', options);
console.log(ar.format(date));
// Output: "٢:٢٣:٤٥٫٦٧٨ م"

英語はAM/PMを伴う12時間形式を使用します。ドイツ語とフランス語は24時間形式を使用します。アラビア語はアラビア・インド数字を使用しますが、同じ時刻フォーマット構造を維持します。すべてのロケールで、小数点以下の秒にはピリオドまたは類似の区切り記号が使用されます。

小数点以下の秒の一般的な使用例

パフォーマンス監視では、応答時間をミリ秒精度で表示します。

const startTime = new Date();
// Perform operation
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(`Operation completed at ${formatter.format(endTime)}`);
// Output: "Operation completed at 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)} - Measurement: ${value}`);
}

logMeasurement(23.5);
// Output: "10/15/2025, 14:23:45.678 - Measurement: 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));
// Output: "02:05.67"

これは、100分の1秒精度でビデオタイムスタンプをフォーマットします。タイムゾーンをUTCに設定することで、期間値のタイムゾーン変換を防ぎます。

小数秒を使用する場合

同じ秒内で発生するイベントを区別する必要がある場合は、小数秒を使用してください。パフォーマンス監視、デバッグ、科学的測定、メディアアプリケーションでは、一般的にこの精度が必要です。

日常的な時刻管理には小数秒を使用しないでください。予定、スケジュール、ユーザー向けタイムスタンプでは、サブ秒精度が必要になることはほとんどありません。不要な精度を追加すると、時刻が読みにくく理解しにくくなります。

ニーズに応じて適切な桁数を選択してください。1桁は多くのユースケースで十分な精度を提供しながら、読みやすさを維持します。3桁は最大精度を提供しますが、より長く技術的な外観のタイムスタンプになります。

まとめ

fractionalSecondDigitsオプションは、時刻フォーマットでサブ秒精度を表示します。1、2、または3の値を受け入れ、10分の1秒、100分の1秒、または1000分の1秒を表示します。fractionalSecondDigitsを使用する場合は、secondオプションを含める必要があります。

JavaScriptのIntl.DateTimeFormatはミリ秒精度をサポートしますが、マイクロ秒精度はサポートしません。3桁の小数は、利用可能な最高精度であるミリ秒を表します。

小数秒は、12時間形式と24時間形式、タイムゾーン、異なるロケールを含む、他のすべての時刻フォーマットオプションと連携します。小数秒の小数点記号は、ロケール間で一貫しています。

パフォーマンス監視、科学データ、デバッグログ、メディアタイムスタンプには小数秒を使用してください。秒精度で十分な日常的な時刻管理では、小数秒を避けてください。