nodejs如何获取时间戳与时间差

 更新时间:2016年08月03日 10:28:56   投稿:daisy  
本文详细介绍了nodejs获取时间戳与时间差的多种方法,对平时nodejs的使用很有帮助,下面一起来看看吧。

Nodejs中获取时间戳的方法有很多种,例如:

    1.new Date().getTime()

    2.Date.now()

    3.process.uptime()

    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('【new Date().getTime()】interval: ', interval);

t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = +new Date;
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log('【+new Date】interval: ', interval);

t1 = new Date().getTime();
for(i = 0; i < count; i++)
{
  t2 = Date.now();
  interval = (t2 - t1);
}
interval = (t2 - t1);
console.log('【Date.now()】interval: ', 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('【hrTime】interval: ', interval, t2 - t1);

【hrTime】interval: 6412 6413 没有记错的话,相同的创建次数,上面的Date.now()可是900ms左右啊!

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

原来nodejs处理高精度时间的时候,计算比较复杂,占用系统资源多,速度慢,那么在高频应用的地方就不适合用这个方法了。下面请看process.uptime()

process.uptime()

此函数是通过nodejs启动运行时间来得到一个秒数时间戳,精确到毫秒:

process.uptime

输入:6.419

此函数以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('【process.uptime()】interval: ', interval);

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

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

不用算那么精确,就是快!

那么需要高频计算时间差的场合,就是你了!

以上就是nodejs获取时间戳与时间差的全部内容,希望对大家平时使用nodejs的时候能有所帮助。

相关文章

  • Express实现Session身份认证的示例代码

    Express实现Session身份认证的示例代码

    本文主要介绍了Express实现Session身份认证的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Node.js 日志处理模块log4js

    Node.js 日志处理模块log4js

    今天和大家分享一下NodeJS中写日志的一个常用第三方包:Log4js.下面我们就来详细探讨下吧
    2016-08-08
  • Node.js中的事件驱动编程详解

    Node.js中的事件驱动编程详解

    这篇文章主要介绍了Node.js中的事件驱动编程详解,本文主要讲解理论性知识,如什么是事件驱动编程、什么是闭包、闭包如何帮助异步编程等知识,需要的朋友可以参考下
    2014-08-08
  • 利用yarn实现一个webpack+react种子

    利用yarn实现一个webpack+react种子

    其实以前就写过如何使用React-router和Webpack快速构建一个react程序。后来发现版本太老,于是乎最近又重新组织了下结构,使用最近发布的yarn作为包管理工具,介绍下基本安装步骤,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • 一行命令搞定node.js 版本升级

    一行命令搞定node.js 版本升级

    今天,又发现一个超级简单的升级node.js的方法。一行命令搞定,省去了重新编译安装的过程。
    2014-07-07
  • node+js搭建时间服务器的思路详解

    node+js搭建时间服务器的思路详解

    这篇文章主要介绍了node+js搭建时间服务器,通过本文的学习可以了解node的fs模块怎么读取数据及express怎么搭建服务器,设置数据接口的,需要的朋友可以参考下
    2022-07-07
  • 详解nodejs微信公众号开发——6.自定义菜单

    详解nodejs微信公众号开发——6.自定义菜单

    这篇文章主要介绍了详解nodejs微信公众号开发——6.自定义菜单,自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。
    2017-04-04
  • 使用C++为node.js写扩展模块

    使用C++为node.js写扩展模块

    本文给大家介绍的是在window7下使用C++来给node.js编写扩展模块的方法,附上一个简单的hello实例,有需要的小伙伴可以参考下。
    2015-04-04
  • Node.js API详解之 timer模块用法实例分析

    Node.js API详解之 timer模块用法实例分析

    这篇文章主要介绍了Node.js API详解之 timer模块用法,结合实例形式分析了Node.js API中timer模块基本功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Node.js HTTP服务器中的文件、图片上传的方法

    Node.js HTTP服务器中的文件、图片上传的方法

    这篇文章主要介绍了Node.js HTTP服务器中的文件、图片上传的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论