了解 JavaScript 提供了哪些方法來生成當前的 UNIX 時間戳。
UNIX 時間戳是一個整數,表示從 1970 年 1 月 1 日開始的秒數。
在像 Linux 和 macOS 這樣的 UNIX-like 系統上,你可以在終端中輸入 date +%s
,然後獲取到 UNIX 時間戳:
$ date +%s
1524379940
在 JavaScript 中,可以通過調用 Date
對象的 now()
方法獲取當前的時間戳:
Date.now()
你也可以通過以下方式獲取相同的值:
new Date().getTime()
或者
new Date().valueOf()
注意:IE8 及以下版本的
Date
對象沒有now()
方法。如果需要支持 IE8 及以下版本,請尋找一個 polyfill,或者在Date.now
為未定義時使用new Date().getTime()
(因為這就是 polyfill 會做的事情)。
在 JavaScript 中,時間戳的表示是以毫秒為單位的。
要獲得以秒為單位的時間戳,可以使用下面的方式進行轉換:
Math.floor(Date.now() / 1000)
注意:一些教程使用
Math.round()
,但它會將值近似到下一秒,即使該秒還未完全結束。
或者,使用下面的方式,雖然可讀性較差:
~~(Date.now() / 1000)
我看到一些教程使用以下方式:
+new Date
這可能看起來很奇怪,但它是正確的 JavaScript 代碼。一元操作符 + 會自動調用所分配對象的 valueOf()
方法,該方法返回時間戳(以毫秒為單位)。這段代碼的問題在於你實例化了一個立即被丟棄的 Date 對象。
要從時間戳生成日期,可以使用 new Date(<timestamp>)
,但請確保傳遞一個數字(如果是字符串,將得到一個“無效日期”的結果 - 如果不確定,使用 parseInt()
)。