このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Date.now()

Baseline
広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

Date.now() は静的メソッドで、 UTC (協定世界時) で 1970 年 1 月 1 日の夜半と定義されている元期からの経過時間を、ミリ秒単位で返します。

試してみましょう

// この例は実行に 2 秒掛かります
const start = Date.now();

console.log("starting timer...");
// 予想される結果: "starting timer..."

setTimeout(() => {
  const ms = Date.now() - start;

  console.log(`seconds elapsed = ${Math.floor(ms / 1000)}`);
  // 予想される結果: "seconds elapsed = 2"
}, 2000);

構文

js
Date.now()

引数

なし。

返値

現在時刻のタイムスタンプをミリ秒単位で表す数値です。

解説

時間の精度の低下

タイミング攻撃やフィンガープリンティングに対する保護機能を提供するために、Date.now() の精度がブラウザーの設定に応じて下げられることがあります。

タイムスタンプは常にミリ秒単位の整数であるため、その分解能はすべてのコンテキストにおいて 1 ミリ秒に制限されます。これにより、基本的なセキュリティおよびプライバシーの要件はすでに満たされています。

Firefox では、privacy.reduceTimerPrecision 設定はデフォルトで有効になっています。デフォルト設定では、タイムスタンプの分解能は 1 ms です。privacy.resistFingerprinting が有効になっている場合、丸め間隔は 16.667 ms または privacy.resistFingerprinting.reduceTimerPrecision.microseconds で設定された間隔のうち、いずれか大きい方となります。最終的な出力は整数に丸められます。

例えば、Firefox では次のような値が考えられます。

js
// デフォルト設定での時間の精度の低下 (1 ms)
Date.now();
// 取りうる値:
// 1519211809934
// 1519211810363
// 1519211811671
// …

// `privacy.resistFingerprinting` が有効な場合の時間の精度の低下
Date.now();
// 取りうる値:
// 1519129853489
// 1519129853506
// 1519129853522
// …

例

経過時間の測定

Date.now() を使用して現在の時刻をミリ秒単位で取得し、前回の時刻を差し引くと、2 つの呼び出し間の経過時間を求めることができます。

js
const start = Date.now();
doSomeLongRunningProcess();
console.log(`経過時間: ${Date.now() - start} ms`);

より複雑なシナリオでは、パフォーマンス API を使用することをお勧めします。

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-date.now

ブラウザーの互換性

関連情報