js如何高效判断某日期是否属于本周日期,日期是否属于本月日期

如题所描述:
js如何高效判断某日期是否属于本周日期,日期是否属于本月日期

阅读 10.8k
5 个回答

比较有意思的问题。
本月日期判断还好处理
如果直接是date对象,可以直接分别获取getMonth() 和 getFullYear() 比较来判断,都相同的就是在一个月
比如

var isSameMonth=function( inDate ){ // inDate 是一个date对象
    var nowDate = new Date();
    return ( ( nowDate.getFullYear() == inDate.getFullYear() ) && 
             ( nowDate.getMonth() == inDate.getMonth() ) 
           );
}

对同一周的判断就比较麻烦啦,首先,需要界定什么算同一周,及一周的起点是那天,如果和js默认一样,认为一周的起点是周日,则需要根据今天计算出本周覆盖到的日子(注意同一周是可以跨月和跨年的),具体判断实现如下

var isSameWeek=function( inDate ){ // inDate 是一个date对象
   let inDateStr = inDate.toLocaleDateString();  // 获取如YYYY/MM/DD的日期
   let nowDate = new Date();
   let nowTime = nowDate.getTime();
   let nowDay = nowDate.getDay();
   for(let i=0;i<7;i++){
      if(inDateStr == ( new Date(nowTime + (i-nowDay)*24*3600*1000) ).toLocaleDateString() ) return true;
   }
   return false;
}

逻辑是先计算出当前日期是当周的X(0<=X<=6)日,则同周的日期范围是其 [0-X,6-X],这样以当前日期为基准,分别计算这个范围内的各个日期对应的toLocaleDateString(),如果存在与inDate对应的toLocaleDateString() 相等,则表明 inDate和现在处于同一周。

好像没有很高效的写法,就是普通写法。

高效这俩字整的有点难搞哦. 一般都是跟现有日期年月日作对比判断吧. 写个方法库, 以后直接引用调用方法,这算不算提高效率... 哈哈哈哈

新手上路,请多包涵
// 判断是不是本周
function inWeek (timestamp) {
  let todaysDate = new Date();
  // 获取今天是周几
  let day = todaysDate.getDay();
  // 计算一周的最后一天
  let lastWeek = new Date(todaysDate.getTime() + (7 - (day || 7)) * 24 * 60 * 60 * 1000);
  lastWeek.setHours(23, 59, 59, 999);
  // 计算一周的第一天
  let firstWeek = new Date(todaysDate.getTime() - ((day || 7) - 1) * 24 * 60 * 60 * 1000);
  firstWeek.setHours(0,0,0,0);
  return timestamp <= lastWeek.getTime() && timestamp >= firstWeek.getTime();
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏