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 实现模拟form表单上传文件
Jul 14 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
nodejs基础之多进程实例详解
Dec 27 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
解析数组非数字键名引号的必要性
2013/08/09 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
2015/12/25 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
《打电话》教学反思
2016/02/22 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS