案例:
数组:
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
}