實現高精度時間獲取的Javascript函數

一、javascript中獲取時間的常用方法

在javascript中,我們通常使用新建Date對象的方式獲取當前的時間,並可以通過該對象調用相關的方法得到年、月、日、時、分、秒等信息:

var date = new Date();
var year = date.getFullYear(); //獲取年份
var month = date.getMonth()+1; //獲取月份,需要注意的是月份是從0開始的,因此需要加1
var day = date.getDate(); //獲取日期
var hour = date.getHours(); //獲取小時
var minute = date.getMinutes(); //獲取分鐘
var second = date.getSeconds(); //獲取秒

但是基於系統內核計算機在時間表示上的精度(一般不超過萬分之一秒), Date對象可能無法滿足所有高要求精度的場景。這時候需要用到高精度時間獲取的方法。接下來我們介紹兩種方法,一種是通過window.performance.now()函數實現,另一種是通過window.Date.now()函數實現。

二、window.performance.now()函數實現高精度時間獲取

window.performance.now() 方法返回當前網頁自 1970/01/01 00:00:00 UTC(協調世界時)到當前時間的毫秒數。這個函數返回的是一個浮點數類型,這個浮點數類型沒有整數部分,只有小數部分。

var start = window.performance.now(); //獲取當前時間
// 這裡是需要進行測量時間的代碼邏輯
var end = window.performance.now(); //獲取結束時間
var costTime = end - start; //得出兩次時間差,單位為毫秒
console.log("代碼邏輯執行耗費時間:"+costTime+"ms"); //輸出結果

三、window.Date.now()函數實現高精度時間獲取

window.Date.now() 返回自1970年1月1日00:00:00 UTC到當前時間的毫秒數。

var startTime = window.Date.now(); //獲取當前時間
// 這裡是需要進行測量時間的代碼邏輯
var endTime = window.Date.now(); //獲取結束時間
var costTime = endTime - startTime; //得出兩次時間差,單位為毫秒
console.log("代碼邏輯執行耗費時間:"+costTime+"ms"); //輸出結果

四、結合getBoundingClientRect()方法實現高精度時間獲取

通過前兩種方式獲取的時間還不能算真正意義上的高精度時間(這裡的精度是指能夠達到微秒級別),接下來我們介紹一種高精度獲取時間的方法。通過window.performance.now()也只能夠獲取到當前chrome進程的相對時間,而無法獲取硬件級別的真實時間戳,我們可以通過getBoundingClientRect()方法結合window.performance.timing.navigationStart來計算出一個硬件級別時間戳來獲得真正意義上的高精度時間:

function getMicrosecondTimestamp() {
  var time = window.performance.now().toFixed(6); //獲取相對時間
  var rect = document.body.getBoundingClientRect(); //獲取body所在位置信息的DOMRect
  var slDifference = rect.left + window.screenLeft; //計算左邊框與屏幕的距離
  var stDifference = rect.top + window.screenTop; //計算上邊框與屏幕的距離
  var navigationStart = window.performance.timing.navigationStart; //獲取navigationStart時間
  var microsecondTimestamp = time + navigationStart - slDifference*10 - stDifference*10; //計算時間戳
  return microsecondTimestamp;
}
console.log(getMicrosecondTimestamp()); //輸出時間戳

原創文章,作者:OMBS,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/146481.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OMBS的頭像OMBS
上一篇 2024-10-31 15:30
下一篇 2024-10-31 15:30

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python函數名稱相同參數不同:多態

    Python是一門面向對象的編程語言,它強烈支持多態性 一、什麼是多態多態是面向對象三大特性中的一種,它指的是:相同的函數名稱可以有不同的實現方式。也就是說,不同的對象調用同名方法…

    編程 2025-04-29
  • 分段函數Python

    本文將從以下幾個方面詳細闡述Python中的分段函數,包括函數基本定義、調用示例、圖像繪製、函數優化和應用實例。 一、函數基本定義 分段函數又稱為條件函數,指一條直線段或曲線段,由…

    編程 2025-04-29

發表回復

登錄後才能評論