了解 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())。