实现高精度时间获取的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/n/146481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OMBSOMBS
上一篇 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

发表回复

登录后才能评论