*******一共有5中方法(执行效率依次降低):
Date.now();
new Date().getTime();
new Date();
process.uptime();
process.hrtime();
Date.now()、new Date().getTime() 和 new Date() 是浏览器环境下一直都有;
process.uptime() 返回的是Node程序已运行的时间,单位秒。
process.hrtime() 返回的是当前的高分辨率时间,格式为[秒, 纳秒]。它是相对于在过去的任意时间,该值与日期无关。优点是:可以获得一个非常精准的时间差,不会受到时钟飘逸的影响;缺点是:速度慢。
要获取一个非常精确地时间间隔,用 process.hrtime();大量循环获取时间戳的时候,要考虑性能,用 Date.now()。
监测性能的代码
function getTimeDifference(method, time) {
var count = time || '100000';
console.time(“one”);
while (count) {
eval(method);
count--;
}
console.timeEnd(“one”);//计算时间间隔,结果one: 27.538ms
}
********五种时间戳
console.log(Date.now());//得到的是当前时间的时间戳1532163468337
console.log(process.uptime());//4.32
console.log(new Date().getTime());//得到的是当前时间的时间戳1532163468337
console.log(new Date());//2018-07-21T08:57:48.337Z
console.log(process.hrtime());//[ 198411, 435296977 ]
*********nodejs时间处理工具momentjs
Moment.js是一个javascript日起处理类库,用于解析,检验,操作,以及显示日期的工具,支持多语言,网站http://momentjs.cn
******npm install moment
nodejs 模块moment格式化时间:
var moment = require('moment');
moment.locale('zh-cn');
var today = {};
var _today = moment();
today.year = _today.format('yyyy'); /*现在的年*/
today.date = _today.format('YYYY-MM-DD'); /*现在的时间*/
today.yesterday = _today.subtract(1, 'days').format('YYYY-MM-DD'); /*前一天的时间*/
var formatDate = moment(12345678977).format('YYYY-MM-DD HH:mm:ss'); /*格式化时间*/
moment().format('MMMM Do YYYY, h:mm:ss a'); // 二月 5日 2017, 12:09:10 中午
moment().format('dddd'); // 星期日
moment().format("MMM Do YY"); // 2月 5日 17
moment().format('YYYY [escaped] YYYY'); // 2017 escaped 2017
moment().format(); // 2017-02-05T12:09:10+08:00
moment("20111031", "YYYYMMDD").fromNow(); // 5 年前
moment("20120620", "YYYYMMDD").fromNow(); // 5 年前
moment().startOf('day').fromNow(); // 12 小时前
moment().endOf('day').fromNow(); // 12 小时内
moment().startOf('hour').fromNow(); // 9 分钟前
moment().subtract(10, 'days').calendar(); // 2017年1月26日
moment().subtract(6, 'days').calendar(); // 本周一中午12点09
moment().subtract(3, 'days').calendar(); // 本周四中午12点09
moment().subtract(1, 'days').calendar(); // 昨天中午12点09分
moment().calendar(); // 今天中午12点09分
moment().add(1, 'days').calendar(); // 明天中午12点09分
moment().add(3, 'days').calendar(); // 下周三中午12点09
moment().add(10, 'days').calendar(); // 2017年2月15日
moment().format('L'); // 2017-02-05
moment().format('l'); // 2017-02-05
moment().format('LL'); // 2017年2月5日
moment().format('ll'); // 2017年2月5日
moment().format('LLL'); // 2017年2月5日中午12点09分
moment().format('lll'); // 2017年2月5日中午12点09分
moment().format('LLLL'); // 2017年2月5日星期日中午12点09分
moment().format('llll'); // 2017年2月5日星期日中午12点09分
******日期转换成时间戳
格式:new Date(localTime).getTime();
需要注意两点:
第一,这里的str是按当地时间(localTime)计算的, 以中国为例,此处str表示北京时间(第8时区)2017年1月19日13时,亦即表示格林威治时间(第0时区)2017年1月19日05时。
第二,此处的str支持多种格式,例如以下两种写法得到的结果一致
var str1 = "2017-01-19 13:00:00";
var str2 = "Jan 19 2017 13:00:00";
var t1 = new Date(str1).getTime();
var t2 = new Date(str2).getTime();
******时间戳转换成日期:
格式:new Date(m);
var t1 = 1484802000000; //milliseconds
var d = new Date(t1);
console.log(d); //=>2017-01-19T05:00:000Z
需要注意的是,这里new Date(m)的参数m是标准时间戳,单位为毫秒,函数返回第0时区的日期。
******日期之间的比较
将日期转换成时间戳后直接进行计算即可,举例计算两个日期之间的间隔是否大于一个星期:
var str1 = "2017-02-27 13:00:00";
var str2 = "2017-03-05 13:00:00";
var t1 = new Date(str1).getTime();
var t2 = new Date(str2).getTime();
if((t2-t1)>7*24*3600*1000) console.log('interval is greater than a week');