判断传入的两个日期对象
是否是同一天。
使用Date.prototype.toISOString()
全等比较传入的日期对象
。
const isSameDate = (dateA, dateB) => {
return dateA.toISOString() === dateB.toISOString();
}
// true
isSameDate(new Date(2010, 10, 20), new Date(2010, 10, 20));
Date.prototype.toISOString
方法使用ISO标准将Date
对象转换为string
。
该标准称为ISO-8601
,格式为: YYYY-MM-DDTHH:mm:ss.sssZ
,返回的是标准GMT时间
。
如果应用面向海外用户,需要考虑跨时区的情况。
GMT时间
指英国格林威治时间,也就是世界标准时间,是0时区的区时。
与我国的标准时间北京时间
(东八区)相差8小时,即GMT时间
早上6点对应北京时间
下午2点。
new Date().getTimezoneOffset
方法可以获取本地时间
与GMT时间
之间相差的分钟数。在东八区调用该方法的返回值为-480
。
getTimezoneOffset
返回值单位是分钟
,而不是小时
,原因是某些国家所占有的时区甚至不到一个小时的间隔。
所以,考虑时区的情况下,以上代码可以写成如下形式:
const getLocalISOTime = date => {
// 将分钟数转化为毫秒数
const offset = date.getTimezoneOffset() * 60 * 1000;
// 去掉误差的本地时间时间戳
const localDate = date.getTime() - offset;
// 转化为ISO标准的时间格式
return new Date(localDate).toISOString();
}
const isSameDate = (dateA, dateB) => {
return getLocalISOTime(dateA) === getLocalISOTime(dateB);
}