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

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

作者: guoss | 来源:发表于2019-11-28 17:58 被阅读0次
    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实现获取两个日期所在周范围,同时作为标记

          本文链接:https://www.haomeiwen.com/subject/dsdfwctx.html