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的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
Jun 06 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 NodeJs
详解nodejs内置模块
May 06 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 CLI模式下的多进程应用分析
2013/06/03 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Python用字典构建多级菜单功能
2019/07/11 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
新闻专业应届生求职信
2013/10/31 职场文书
酒店led欢迎词
2014/01/09 职场文书
质检部经理岗位职责
2014/02/19 职场文书
迟到检讨书范文
2015/01/27 职场文书
清洁工岗位职责
2015/02/13 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
Python中json.dumps()函数的使用解析
2021/05/17 Python
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript