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入门详解(多篇文章结合)
Mar 07 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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用户登录之cookie信息安全分析
2016/05/13 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python help()函数用法详解
2014/03/11 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
精灵市场:Pixie Market
2019/06/18 全球购物
大学活动邀请函
2014/01/28 职场文书
课程改革实施方案
2014/03/16 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
集中整治工作方案
2014/05/01 职场文书
五四青年节的活动方案
2014/08/20 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
社区服务活动感想
2015/08/11 职场文书
python常见的占位符总结及用法
2021/07/02 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏