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教程之入门
Nov 21 NodeJs
Nodejs学习笔记之NET模块
Jan 13 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 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 表单提交给自己
2008/07/24 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python: 自动安装缺失库文件的方法
2018/10/22 Python
详解python中的hashlib模块的使用
2019/04/22 Python
python反编译学习之字节码详解
2019/05/19 Python
python3实现高效的端口扫描
2019/08/31 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
AOP的定义以及作用
2013/09/08 面试题
应用电子技术专业个人求职信
2013/09/21 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
计算机软件专业求职信
2014/06/10 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers
python 镜像环境搭建总结
2022/09/23 Python