计算两个时间的时间差&时区转换
计算两个时间的时间差:
-
获取两个时间数据,通常这两个时间是:后端给的时间数据和当前时间
let dateBegin = '2018/08/28 04:56:38';
dateBegin = new Date(dateBegin);
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
东八区的时间
:
上面
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);
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);