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中使用monk访问mongodb
Jul 06 NodeJs
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs基础之多进程实例详解
Dec 27 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
Nodejs 识别图片类型的方法
Aug 15 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 NodeJs
nodejs各种姿势断点调试的方法
Jun 18 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
js传值 判断
2006/10/26 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python中文字符串截取问题
2015/06/15 Python
python监控文件或目录变化
2016/06/07 Python
python导入模块交叉引用的方法
2019/01/19 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python用户自定义异常的实现
2020/12/25 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
本科毕业生求职自荐信
2014/04/09 职场文书
七夕情人节促销方案
2014/06/07 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
教师节慰问信
2015/02/15 职场文书
党员读书活动心得体会
2016/01/14 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis