js实现获取两个日期所在周范围,同时作为标记

class TimeRange {
  constructor(begin, end, arr) {
    this.begin = begin
    this.end = end
    this.arrTime = arr
    var begintime = new Date(this.begin);
    var endtime = new Date(this.end);
    /* 获取日期对应的毫秒数 */
    var beginnowTime = begintime.getTime() ;
    /* 返回一个具体日期中一周的第几天,0 表示星期天 */
    var beginday = begintime.getDay();
    var enddayTime = endtime.getTime() ;
    var endday = endtime.getDay();

    /* 一天的时间 */
    var oneDayTime = 24*60*60*1000 ;
    this.MondayTime = this.gettime(beginnowTime - (beginday)*oneDayTime) ; //显示周一
    this.SundayTime =  this.gettime(enddayTime + (6-endday)*oneDayTime) ; //显示周日
  }
  gettime(timerange) {
    let date = new Date(timerange)
    let Y = date.getFullYear() + '-';
    let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
    let D = date.getDate() + ' ';
    return `${Y}${M}${D}`
  }
  format(timeparam) {
    var s = '';
    var mouth = (timeparam.getMonth() + 1) >= 10 ? (timeparam.getMonth() + 1) : ('0' + (timeparam.getMonth() + 1));
    var day = timeparam.getDate() >= 10 ? timeparam.getDate() : ('0' + timeparam.getDate());
    s += timeparam.getFullYear() + '-'; // 获取年份。
    s += mouth  + "-"; // 获取月份。
    s += day; // 获取日。
    return (s); // 返回日期。
  }
  /* 获取当前数据所在周日到周六的范围
  * beginflag 0无信息 1开始标志
  * endflag 0无信息 1结束标志
  * flag 0无信息 1可以选择
  * */
  getAll() {
    let ab = this.MondayTime.split("-")
    let ae = this.SundayTime.split("-")
    let db = new Date();
    db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
    let de = new Date();
    de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
    let unixDb = db.getTime()
    let unixDe = de.getTime()
    let timeArr = []
    for (let k = unixDb; k <= unixDe;) {
      let formatTime = this.format(new Date(parseInt(k)))
      let option = {
        time: formatTime,
        flag: 0,
        beginflag: 0,
        endflag: 0
      }
      let indexflag = this.arrTime.find((itemarr) =>{
        return itemarr === formatTime
      })
      if(indexflag) {
        option.flag = 1
      }
      timeArr.push(option)
      /* 一天的时间 */
      k = k + 24 * 60 * 60 * 1000;
    }

    return timeArr
  }
  /* 获取当前组的信息 */
  getgroup() {
    /* 分组数组 */
    let timegroupTmp = []
    /* 具有开始结束标志的数组 */
    let timerangeTmp = []
    let timrArr = this.getAll()
    this.getAll().forEach((item, index) => {
      let option = item
      if(item.flag === 1) {
        if(index === 0) {
          option.beginflag = 1
          if (timrArr[index+1].flag === 1) {
            option.endflag = 0
          }else {
            option.endflag = 1
          }
        } else if( index === timrArr.length-1) {
          option.endflag = 1
          if (timrArr[index-1].flag === 1) {
            option.beginflag = 0
          } else {
            option.beginflag = 1
          }
        } else {
          if(timrArr[index-1].flag === 1 && timrArr[index+1].flag === 1) {

          } else if(timrArr[index-1].flag === 1 && timrArr[index+1].flag  === 0) {
            option.endflag = 1
          } else if(timrArr[index-1].flag === 0 && timrArr[index+1].flag === 1) {
            option.beginflag = 1
          } else if(timrArr[index-1].flag === 0 && timrArr[index+1].flag === 0) {
            option.beginflag = 1
            option.endflag = 1
          }
        }
      }
      timegroupTmp.push(option)
    })
    return timegroupTmp
  }
}
/*let time = ['2019-12-22', '2019-12-28', '2020-01-03', '2020-01-04']
let timeRange = new TimeRange('2019-12-28', '2020-1-4', time)
let data = timeRange.getAll()
let data2 = timeRange.getgroup()*/
/*
console.log(data2)*/

export {TimeRange}

你可能感兴趣的:(js实现获取两个日期所在周范围,同时作为标记)