ミリ秒やマイクロ秒を時間表示でどのように表示しますか?

Intl.DateTimeFormatを使用して時間表示で秒未満の精度を表示する

はじめに

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

パフォーマンス監視ツールはミリ秒単位でレスポンス時間を表示します。科学的なアプリケーションは秒未満の精度で測定値を表示します。動画や音声アプリケーションはミリ秒単位でタイムスタンプを表示します。ロギングシステムは、近接して発生するイベントを区別するために、秒の小数部を含むタイムスタンプでイベントを記録します。

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

小数秒精度の理解

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

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

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

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));
// 出力: "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));
// 出力: "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));
// 出力: "2:23:45.67 PM"

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

小数秒を3桁表示する

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"

これにより、JavaScript の Date オブジェクトで利用可能なミリ秒の精度が完全に表示されます。Intl.DateTimeFormat でサポートされる最大精度は 3 桁です。

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(`Operation completed at ${formatter.format(endTime)}`);
// 出力: "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);
// 出力: "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));
// 出力: "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時間形式、タイムゾーン、さまざまなロケールなど、他のすべての時間フォーマットオプションと連携します。小数秒の小数点区切り文字はロケール間で一貫しています。

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