Date.now()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Date.now() 靜態方法回傳自紀元(UTC 時間 1970 年 1 月 1 日午夜)以來經過的毫秒數。

嘗試一下

// 此範例需要 2 秒執行
const start = Date.now();

console.log("計時器啟動...");
// 預期輸出:「計時器啟動...」

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

  console.log(`經過的秒數 = ${Math.floor(ms / 1000)}`);
  // 預期輸出:「經過的秒數 = 2」
}, 2000);

語法

js
Date.now()

參數

無。

回傳值

一個數字,表示當前時間的時間戳(以毫秒為單位)。

描述

降低時間精度

為了提供對計時攻擊和指紋追蹤的保護,Date.now() 的精度可能會根據瀏覽器設定進行四捨五入。在 Firefox 中,privacy.reduceTimerPrecision 偏好設定預設為啟用,且預設值為 2ms。你也可以啟用 privacy.resistFingerprinting,在這種情況下,精度將為 100ms 或 privacy.resistFingerprinting.reduceTimerPrecision.microseconds 的值,以較大者為準。

例如,在降低時間精度的情況下,Date.now() 的結果將始終是 2 的倍數,或者在啟用 privacy.resistFingerprinting 的情況下是 100(或 privacy.resistFingerprinting.reduceTimerPrecision.microseconds)的倍數。

js
// Firefox 60 中降低的時間精度(2ms)
Date.now();
// 可能為:
// 1519211809934
// 1519211810362
// 1519211811670
// …

// 啟用 `privacy.resistFingerprinting` 後降低的時間精度
Date.now();
// 可能為:
// 1519129853500
// 1519129858900
// 1519129864400
// …

範例

測量經過的時間

你可以使用 Date.now() 來獲取當前的毫秒時間,然後減去先前的時間,以計算兩次呼叫之間經過了多少時間。

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

對於更複雜的情境,你可能需要改用 Performance API

規範

Specification
ECMAScript® 2026 Language Specification
# sec-date.now

瀏覽器相容性

參見