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读取memcache示例分享
Jan 02 NodeJs
nodejs之请求路由概述
Jul 05 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 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
PHP中几个常用的魔术常量
2012/02/23 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
js下将字符串当函数执行的方法
2011/07/13 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
Python类的动态绑定实现原理
2020/03/21 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
Java程序员面试90题
2013/10/19 面试题
迟到检讨书900字
2014/01/14 职场文书
保密承诺书
2014/03/27 职场文书
环保建议书200字
2014/05/14 职场文书
实习公司领导推荐函
2014/05/21 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
承诺书范本大全
2015/05/04 职场文书
公司董事任命书
2015/09/21 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python