首頁  >  文章  >  web前端  >  nodejs如何取得時間戳與時間差

nodejs如何取得時間戳與時間差

高洛峰
高洛峰原創
2017-02-04 11:02:521252瀏覽

Nodejs中取得時間戳記的方法有很多種,例如:

    1.new Date().getTime() 

    2.Date.now()   4 .process.hrtime() 

平常想取得時間戳的話,用這些方法都可以,那麼這些方法有什麼差別呢?

new Date().getTime()和Date.now()


這些方法是透過node運作環境的系統時間毫秒數, +new Date() 寫法的效果和 new Date().getTime() 效果相同。

在需要頻繁使用時間戳的場景中,需要專注於方法效能,這幾種方法中 Date.now()的效能最佳,可以透過一點程式碼來測試:

var t1 = new Date().getTime();
var t2 = t1;
var i = 0, count = 10000000, interval = 0;
 
for(i = 0; i < count; i++)
{
  t2 = new Date().getTime();
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【new Date().getTime()】interval: &#39;, interval);
 
t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = +new Date;
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【+new Date】interval: &#39;, interval);
 
t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = Date.now();
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【Date.now()】interval: &#39;, interval);

   

輸出結果:   

輸出結果:   

輸出結果:   

輸出結果:   

輸出結果:

【new Date().getTime()】interval: 1583

【+new Date】interval: 2189

【Date.now()】interval: 891

如果只是取得時間戳,那麼使用Date.now )是最佳的做法,但是如果要計算時間差,這幾個方法就會有點問題:運行環境的系統時間有時候是會有微小回調的,這樣得到的時間差就不精確了,有時候會引發某些BUG。

process.hrtime()

這種方式是根據任意取的一個過去的時間點,距離現在的時間來獲取一個精確的時間戳對象:[秒, 納秒]

> process.hrtime()
[ 3197146, 563552237 ]

   

這種方式和系統時間無關,因此不會受到系統時鐘漂移的影響,用來計算時間差的時候就不會有BUG了。

但是,萬事總有但是 - -

如果用在一個被頻繁調用的地方呢?

var t1 = new Date().getTime();
var t2 = t1;
var i = 0, count = 10000000, interval = 0;
 
var hrTime1 = process.hrtime();
var hrTime2 = hrTime1;
 
t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  hrTime2 = process.hrtime(hrTime1);
}
t2 = new Date().getTime();
interval = parseInt(hrTime2[0] * 1e3 + hrTime2[1] * 1e-6);
console.log(&#39;【hrTime】interval: &#39;, interval, t2 - t1);

【hrTime】interval: 6412 6413 沒有記錯的話,相同的創建次數,上面的Date.now()可是900ms左右啊!

process.hrtime()也太慢了有木有! ! !

原來nodejs處理高精度時間的時候,計算比較複雜,佔用系統資源多,速度慢,那麼在高頻應用的地方就不適合用這個方法了。下面請看process.uptime()

process.uptime()

此函數是透過nodejs啟動運行時間來得到一個秒數時間戳,精確到毫秒:

process.uptime 

此函數以node啟動時間為準,同樣也不會受系統時鐘漂移影響,適合用來計算時間差。

那麼多次呼叫效能如何呢?

var t1 = new Date().getTime();
var t2 = t1;
var i = 0, count = 10000000, interval = 0;
 
t1 = process.uptime()*1000;
for(i = 0; i < count; i++)
{
  t2 = process.uptime()*1000;
  //interval = (t2 - t1);
}
interval = (t2 - t1);
console.log(&#39;【process.uptime()】interval: &#39;, interval);

輸出:【process.uptime()】interval: 954

和process.hrtime()相比性能就搞出很多了~

不用算那麼精確,就是快!

🎜那麼需要高頻計算時間差的場合,就是你了! 🎜🎜以上就是nodejs取得時間戳與時間差的全部內容,希望對大家平時使用nodejs的時候能有所幫助。 🎜🎜更多nodejs如何取得時間戳與時間差相關文章請關注PHP中文網! 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn