/**
* 1. 时间范围: ["00:00", "23:59"]
* [
* ["23:00","23:50"],
* ["00:00","01:00"],
* ["00:30","01:20"],
* ["03:00","03:20"],
* ["03:20","03:40"],
* ]
* 输出:
* [
* ["00:00","01:20"],
* ["03:00","03:40"],
* ["23:00","23:50"],
* ]
*/
function mergeTimeRanges(ranges){
// ranges = ["00:00", "23:59"]
let dateStr = new Date().toLocaleDateString();
let arr = [
["23:00","23:50"],
["00:00","01:00"],
["00:30","01:20"],
["03:00","03:20"],
["03:20","03:40"],
];
let fullTimeArr = arr.map(e=>{
return e.map(sub=>mergeTimeStr(dateStr,sub))
})
fullTimeArr = fullTimeArr.sort((a,b)=>{
return a[0]>b[0]?1:-1;
})
let backArr = []
fullTimeArr.forEach(item=>{
// 排除ranges之外的数据
if(ranges[0]>=item[1]||ranges[1]<=item[0]){
return
}
let last = backArr[backArr.length-1]
if(last){
// 第N次取值
// 处理内部时间交叉点
if(last[1]>=item[0]){
if(ranges[1]<item[1]){
item[1] = ranges[1]
}
last[1] = item[1]
}else{
backArr.push(item)
}
}else{
// else 第一次取值
// 处理与ranges交叉点
if(ranges[0]>item[0]){
item[0] = ranges[0]
}
if(ranges[1]<item[1]){
item[1] = ranges[1]
}
backArr.push(item)
}
})
backArr = backArr.map(item=>{
return item.map(sub=>{
return sub.toTimeString().match(/^\d+:\d+/)[0]
})
})
function mergeTimeStr(dateStr , time){
return new Date(`${dateStr} ${time}:00`)
}
return backArr
}
时间片段合并
2021/8/12 11:49:18webjs