isSameDate

时间:2022-07-24
本文章向大家介绍isSameDate,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

判断传入的两个日期对象是否是同一天。


使用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时间

GMT时间指英国格林威治时间,也就是世界标准时间,是0时区的区时。

与我国的标准时间北京时间(东八区)相差8小时,即GMT时间早上6点对应北京时间下午2点。

getTimezoneOffset

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);
}