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(); // 第二个数据通常是当前时间
使用getTime()
返回与固定的 1970 年 1 月 1 日的时间差,再用大的时间减去短的时间即可得出双方相差的毫秒数。
let dateDiff = dateEnd.getTime() - dateBegin.getTime();
换算成你想要的时间单位,得出两个时间的时间差。
// 计算出相差天数
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(相差</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>dayDiff<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">天</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>hours<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">小时</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>minutes<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">分钟</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>seconds<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">秒
);
如果你只想计算相差的小时数,不想管天数:
let dayDiff = Math.floor(dateDiff / (3600 * 1000)); // 其他的同理,倍数正确即可
# 时区转换
拿到这么一串字符串:2018-09-17
,要与当前的日期比较,求出日期差。
let time = `2018-09-17`;
let dateBegin = new Date(time);
let dateEnd = new Date(); // 这一秒的时间 需重新设置
dateEnd.setHours(0, 0, 0, 0);
// 计算时间差 参照上文
东八区的时间:
上面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);
// 计算时间差 参照上文
也可以使用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);
// 计算时间差 参照上文
当前时区与世界时同步:
let time = `2018-09-17`;
let dateBegin = new Date(time);
let dateEnd = new Date(); // 这一秒的时间 需重新设置
dateEnd.setHours(8, 0, 0, 0); // 设置为八点与世界时一致
// 计算时间差 参照上文
你可能不知道当前时区与世界时相差多少
let time = `2018-09-17`;
let dateBegin = new Date(time);
let dateEnd = new Date(); // 这一秒的时间 需重新设置
dateEnd.setUTCHours(0, 0, 0, 0); // 设置为世界时的0点 也就是北京时间八点
// 计算时间差 参照上文
以上:2018.09.21