用于提示未提交日报日期展示(eg: n年m月d日、(d+4)日、(d+6)-(d+12)日)

51 阅读1分钟

案例:

数组:

dateList = ['2022-12-12','2022-12-13','2022-12-14','2022-12-15','2022-12-17','2023-12-24','2023-1-1','2023-1-2','2023-1-5','2023-1-6','2023-1-7','2023-1-8','2023-3-1','2023-3-15']

效果:

2022年12月12-15日、17日、24日;2023年1月1日、2日、5-8日,3月1日、15日


// 待补日期转换  
dateToString(list = []) {  
  //年份  
  let yearList = []  
  // 获取年  
  list.forEach(item => {  
    if (yearList.toString().indexOf(item.substring(0, 4)) == -1) {  
      yearList.push(item.substring(0, 4))  
    }  
  })  
  
  //年-月  
  let monthList = []  
  yearList.forEach(year => {  
    // 月份  
    let months = []  
    list.forEach(it => {  
      if (year == it.substring(0, 4)) {  
        // console.log( it.substring( it.toString().indexOf('-') + 1, it.toString().lastIndexOf('-') ), months.toString().indexOf( it.substring( it.toString().indexOf('-') + 1, it.toString().lastIndexOf('-') ) ) )  
        // 获取月份  
        let monthNow = it.substring(  
          it.toString().indexOf('-') + 1,  
          it.toString().lastIndexOf('-')  
        )  
        if (months.toString().indexOf(monthNow) == -1) {  
          months.push(monthNow)  
        }  
      }  
    })  
    
    let date = []  
    months.forEach(it => {  
      // 当前月日期  
      let lists = []  
      list.forEach(ym => {  
        if (  
          year + '-' + it ==  
          ym.substring(0, ym.toString().lastIndexOf('-'))  
        ) {  
          lists.push(ym)  
        }  
      })  
      // 日期显示转换  
      let dateString = []  
      // 当前月排序处理  
      let days = this.continueDays(lists)  
      days.forEach(t => {  
        if (t.length >= 3) {  
          let day = t[0].substring(  
            t[0].toString().lastIndexOf('-') + 1,  
            t[0].toString().length  
          )  
          let d = day.substring(0, 1) == '0' ? day.substring(1, 2) : day  
          let lastDay = t[t.length - 1].substring(  
            t[t.length - 1].toString().lastIndexOf('-') + 1,  
            t[t.length - 1].toString().length  
          )  
          let ld =  
            lastDay.substring(0, 1) == '0'  
              ? lastDay.substring(1, 2)  
              : lastDay  
          dateString.push(day + '日-' + lastDay + '日')  
        } else {  
          t.forEach(d => {  
            let dayNow = d.substring(  
              d.toString().lastIndexOf('-') + 1,  
              d.toString().length  
            )  
            let dn =  
              dayNow.substring(0, 1) == '0'  
                ? dayNow.substring(1, 2)  
                : dayNow  
            dateString.push(dn + '日')  
          })  
        }  
      })  
      let md = it.substring(0, 1) == '0' ? it.substring(1, 2) : it  
      date.push(md + '月' + dateString.toString().replaceAll(',', '、'))  
    })  
    // console.log('lists', date)  
    if (yearList.length > 1) {  
      monthList.push(year + '年' + date.toString().replaceAll(',', '; '))  
    } else {  
      monthList.push(date.toString().replaceAll(',', '; '))  
    }  
  })  
console.log("结果:",monthList.toString().replaceAll(',', '; '))
},
    
// 判断日期是否连续  
continueDays(arr_days) { 
    let days = arr_days.sort().map((d, i) => {  
        let dt = new Date(d)  
        dt.setDate(dt.getDate() + 4 - i)  return +dt  
    })  
    let newDays = [...new Set(days)]  
    let dataArray = []  
    newDays.forEach(ele => {  
        let arr = []  
        days.forEach((item, i) => {  
            if (ele === item) { 
            arr.push(arr_days[i])  
            }  
        })  
    dataArray.push(arr)  
    })  
 return dataArray  
}