[转] node.js如何获取时间戳与时间差

[From] http://www.jb51.net/article/89767.htm

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() 的性能最佳,可以通过一点代码来测试:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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()

这种方式是根据任意取的一个过去的时间点,距离现在的时间来获取一个精确的时间戳对象:[秒, 纳秒]

?


1

2

> process.hrtime()

[ 3197146, 563552237 ]

这种方式和系统时间无关,因此不会受到系统时钟漂移的影响,用来计算时间差的时候就不会有BUG了。

但是,万事总有但是 - -

如果用在一个被频繁调用的地方呢?

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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启动时间为准,同样也不会受系统时钟漂移影响,适合用来计算时间差。

那么多次调用性能如何呢?

?


1

2

3

4

5

6

7

8

9

10

11

12

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的时候能有所帮助。

原文地址:https://www.cnblogs.com/pekkle/p/8194956.html

时间: 2024-10-13 23:25:56

[转] node.js如何获取时间戳与时间差的相关文章

Node.js express获取参数有三种方法

Node.js express获取参数有三种方法 近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结. express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params (req.query), ex: ?id=12 Checks urlencoded body params (req.body), ex

js中获取时间戳

function conver(){ var date = new Date(); var year = date.getFullYear() var month=date.getMonth()+1; var day = date.getDate(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); month =(month<10 ? "0"+

Node.js Express 获取request原始数据

app.use(bodyParser.json());客户端请求接口时如果指名请求头类型 为Content-Type=application/jsonbodyParser 会自动将 body 里的 json 格式数据正确解析, // bodyParser 依赖 raw-body 库,raw-body库里面有这样一段代码 function cleanup() { received = buffer = null stream.removeListener('data', onData) strea

阿里云 CentOS7.2 配置FTP+Node.js环境

本人小白,写下这篇博客意在记录踩过的坑,大神请绕道~ 准备工作 安装自己喜欢的连接软件(一般是putty或者xshell),本人选择的是xshell,软件如图 : 通过软件中的ssh连接连接上已经购买的服务器,具体账号密码可在阿里云的控制台设置 . 在控制台选择主机系统为CentOS7.2,连接上了之后首先先将服务器更新至最新版本. 1 yum -y update 接着安装编译源代码的开发工具 . 1 yum -y groupinstall "Development Tools" FT

Node.js模块导入导出

这篇文章本来是想模块导入导出和事件循环一起写的,但是感觉一起写的话会太长了,所以就分开两篇文章写吧.下一篇会重点介绍一下js中的事件循环,js代码到底是以何种顺序去执行的呢?我相信你看懂了事件循环再去看node对你的帮助是非常大的. 讲模块系统之前先认识一下node.js中的全局对象. node.js的全局对象 众所周知的是在浏览器中的老大哥是谁,它就是window,this指向的也是window,那么在node中的全局对象就不是window了,而是global,可以在命令行中去看一下,想学习n

Node.js获取GET/POST数据

目标:使用Node.js搭建简单服务器提供简单接口,达到两数字加减乘除计算并返回json结果.(通用GET/POST) 知识点 获取GET数据 获取POST数据 了解监听事件 实现 var http = require("http"); //提供web服务 var url = require("url"); //解析GET请求 var query = require("querystring"); //解析POST请求 //服务 var serv

node.js express fs 获取已上传文件数据格式

{ "fieldName": "photo", "originalFilename": "1395130808991.jpg", "path": "tmpupload/25546-z8u01y.jpg", "headers": { "content-disposition": "form-data; name=\"photo\&

node.js获取cookie

node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').forEach(l => { var parts = l.split('='); Cookies[parts[0].trim()] = (parts[1] || '').trim(); }); }

Node.js中的express框架获取http参数

最近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结. express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params (req.query), ex: ?id=12 Checks urlencoded body params (req.body), ex: id=1.例如:127.0.0.1:3000