计算起始时间与结束时间之间有哪些月份和周数

estLabourMonth() {
    
    
      const months = []
      const monthCol = []
      const start = new Date(this.form.project_start_date); // 开始时间
      const end = new Date(this.form.project_end_date); // 结束时间
      const end1 = new Date(end.getFullYear(),end.getMonth()+1,1) // 结束时间日期+1
      const currentDate = start;
      while (currentDate <= end1) {
    
    
        const month = currentDate.getMonth();
        let str = currentDate.getFullYear() + "-" + (month + 1) + "";
        const s = currentDate.getFullYear() + "-0";
        if (str == s) {
    
    
          str = currentDate.getFullYear() + "-12";
        }
        months.push(str);
        monthCol.push(str)
        currentDate.setMonth(month + 1);

      }
      this.form.monthCol = monthCol
      return months; 
    }

取出月份

<el-table-column
   :key="index"
   type="cell"
   :index="index"
   v-for="(m, index) in estLabourMonth()"  // m 即为月份
   :label="m+'月'" 
   width="120"
   align="center"
   :prop="m"
 >

二、计算起始时间与结束时间之间有哪些周(注意!!:当一周分配在两个月中间的时候,我是周四之前的日期算在上月,之后的算在下月)

estLabourWeek() {
    
    
      const weeks = []
      const weekCol = []
      const start = new Date(this.form.project_start_date); //起始日期
      const end = new Date(this.form.project_end_date); //结束日期
  
      let beginDate = new Date(start.getFullYear(), 0, 1); //起始日期年份的第一天
      let endnDate = new Date(end.getFullYear(), 0, 1); //结束日期年份的第一天

      let bd = beginDate.getDay() >= 4 ? (beginDate.getDay() - 7) : beginDate.getDay()
      let ed = endnDate.getDay() >= 4 ? (endnDate.getDay() - 7) : endnDate.getDay()
      let beginWeek = Math.ceil((parseInt((start - beginDate) / (24 * 60 * 60 * 1000)) + 1 + bd) / 7); //起始日期在当年的周数
      let endWeek = Math.ceil((parseInt((end - endnDate) / (24 * 60 * 60 * 1000)) + 1 + ed) / 7); //结束日期在当年的周数
      let startWeek = beginWeek
      let startYear = start.getFullYear()
      
      if(start.getFullYear() == end.getFullYear()) {
    
     
        if(startWeek == 0) {
    
    
          let dateb11 = new Date(startYear-1+'-01-01 00:00:00')
          let date11 = new Date(startYear+'-01-01 00:00:00')
          let date1231 = new Date(startYear-1+'-01-01 00:00:00')
          let beforeWeek = Math.ceil((parseInt((date11 - date1231) / (24 * 60 * 60 * 1000)) + 1 + (dateb11.getDay() >= 4 ? (dateb11.getDay() - 7) : dateb11.getDay())) / 7); //起始年份前一年最后一天在当年的周数
          weeks.push({
    
    
            weeks: startYear-1 + "-" + beforeWeek,
            show: this.weekToDate(startYear-1,beforeWeek,5)
          });
          weekCol.push(startYear-1 + "-" + beforeWeek)
          startWeek++;
        }
        while (startWeek <= endWeek) {
    
    
          let daten11 = new Date(end.getFullYear()+1+'-01-01 00:00:00')
          let nextWeek = Math.ceil((parseInt((new Date(end.getFullYear()+1, 0, 1) - endnDate) / (24 * 60 * 60 * 1000)) + 1 + ed) / 7) //结束年份最后一天在当前年份的周数
          let str,show
          if(startWeek == nextWeek && daten11.getDay() < 4) {
    
    
              str = start.getFullYear()+1 + "-1" 
              show = this.weekToDate(start.getFullYear()+1,1,5)
          } else {
    
    
              str = start.getFullYear() + "-" + startWeek
              show = this.weekToDate(start.getFullYear(),startWeek,5)
          }
          weeks.push({
    
    
            weeks: str,
            show: show
          });
          weekCol.push(str)
          startWeek++;
        }
      } else {
    
    
        while (startYear <= end.getFullYear()) {
    
    
          let dayMS=24*60*60*1000
          let betDay = new Date(startYear+1+'-01-01 00:00:00').getTime() - new Date(startYear+'-01-01 00:00:00').getTime()
          let newD1 = new Date(startYear,0,1)
          let newD2 = new Date(startYear,11,31)
          let betWeek = betDay / dayMS  - (newD2.getDay()+1) - (7-newD1.getDay())
          let day = 0
          if(newD1.getDay() < 4 && newD1.getDay() > 0) {
    
    
              day += 1
          }
          if(newD2.getDay() >= 4 || newD2.getDay() == 0) {
    
    
              day += 1
          }
          day += (betWeek / 7)
          for(let i = 1; i<=day; i++) {
    
    
            if((startYear == start.getFullYear() && i >= startWeek) || (startYear > start.getFullYear() && startYear < end.getFullYear()) || (startYear == end.getFullYear() && i <= endWeek)) {
    
    
              let str = startYear + "-" + i
              let show = this.weekToDate(startYear,i,5)
              weeks.push({
    
    
                weeks: str,
                show: show
              });
              weekCol.push(str)
            }
            
          }
          startYear++
        }
      }
      this.form.weekCol = weekCol
      return weeks
    },

猜你喜欢

转载自blog.csdn.net/Raken12/article/details/112310045
今日推荐