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


Posted in NodeJs onAugust 03, 2016

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的时候能有所帮助。

NodeJs 相关文章推荐
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
Sep 18 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 #NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 #NodeJs
nodejs加密Crypto的实例代码
Jul 07 #NodeJs
Nodejs中 npm常用命令详解
Jul 04 #NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 #NodeJs
NodeJs——入门必看攻略
Jun 27 #NodeJs
浅析Nodejs npm常用命令
Jun 14 #NodeJs
You might like
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
显示、隐藏密码
2006/07/01 Javascript
javascript下function声明一些小结
2007/12/28 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
js获取域名的方法
2015/01/27 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
python执行使用shell命令方法分享
2017/11/08 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
如何在Django项目中引入静态文件
2019/07/26 Python
python实现单链表的方法示例
2019/09/03 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
Joules美国官网:出色的英国风格
2017/10/30 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
工作个人的自我评价
2014/01/14 职场文书
迟到检讨书500字
2014/02/05 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
交通事故案件代理词
2015/05/23 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers