# 计算两个时间的时间差&时区转换
# 计算两个时间的时间差:
获取两个时间数据,通常这两个时间是:后端给的时间数据和当前时间
let dateBegin = '2018/08/28 04:56:38'; // 初始时间 dateBegin = new Date(dateBegin); // Mon Aug 28 2017 04:56:38 GMT+0800 (中国标准时间) // 上面是Date对象的数据形式 let dateEnd = new Date(); // 第二个数据通常是当前时间
1
2
3
4
5使用
getTime()
返回与固定的 1970 年 1 月 1 日的时间差,再用大的时间减去短的时间即可得出双方相差的毫秒数。let dateDiff = dateEnd.getTime() - dateBegin.getTime();
1换算成你想要的时间单位,得出两个时间的时间差。
// 计算出相差天数 let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); // 计算天数后剩余的毫秒数 利用这个时间去计算小时 let leave1 = dateDiff % (24 * 3600 * 1000); // 计算出小时数 let hours = Math.floor(leave1 / (3600 * 1000)); // 计算相差分钟数 let leave2 = leave1 % (3600 * 1000); // 计算小时数后剩余的毫秒数 let minutes = Math.floor(leave2 / (60 * 1000)); // 计算相差分钟数 // 计算相差秒数 let leave3 = leave2 % (60 * 1000); // 计算分钟数后剩余的毫秒数 let seconds = Math.round(leave3 / 1000); // 结果 console.log(`相差${dayDiff}天${hours}小时${minutes}分钟${seconds}秒`);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
如果你只想计算相差的小时数,不想管天数:
let dayDiff = Math.floor(dateDiff / (3600 * 1000)); // 其他的同理,倍数正确即可
1
# 时区转换
需求:
拿到这么一串字符串:2018-09-17
,要与当前的日期比较,求出日期差。
let time = `2018-09-17`;
let dateBegin = new Date(time);
let dateEnd = new Date(); // 这一秒的时间 需重新设置
dateEnd.setHours(0, 0, 0, 0);
// 计算时间差 参照上文
1
2
3
4
5
2
3
4
5
东八区的时间:
上面new Date(time)
之后拿到的是零时区 0 点的时间,在东八区也就是北京时间08:00:00
。
而我们第二个时间设置的是北京时间00:00:00
,这里面就出现了八个小时的误差。
转换时区的三种方法:
设置世界时为当前时区的时间:
设置具体的时间,传进
new Date()
的时候会自动转成北京时间00:00:00
,然后两个时间就可以同步了。let time = `2018-09-17`; time = `${time} 00:00:00`; // 后面加上具体时间 let dateBegin = new Date(time); let dateEnd = new Date(); // 这一秒的时间 需重新设置 dateEnd.setHours(0, 0, 0, 0); // 计算时间差 参照上文
1
2
3
4
5
6也可以使用
setHours
:let time = `2018-09-17`; let dateBegin = new Date(time); dateBegin.setHours(0, 0, 0, 0); // new Date()之后 设为0点 两个时间同步 let dateEnd = new Date(); // 这一秒的时间 需重新设置 dateEnd.setHours(0, 0, 0, 0); // 计算时间差 参照上文
1
2
3
4
5
6当前时区与世界时同步:
let time = `2018-09-17`; let dateBegin = new Date(time); let dateEnd = new Date(); // 这一秒的时间 需重新设置 dateEnd.setHours(8, 0, 0, 0); // 设置为八点与世界时一致 // 计算时间差 参照上文
1
2
3
4
5你可能不知道当前时区与世界时相差多少
let time = `2018-09-17`; let dateBegin = new Date(time); let dateEnd = new Date(); // 这一秒的时间 需重新设置 dateEnd.setUTCHours(0, 0, 0, 0); // 设置为世界时的0点 也就是北京时间八点 // 计算时间差 参照上文
1
2
3
4
5
以上:2018.09.21