js
js 24小时制 给定多个时间段 计算剩下的时间段
//已经存在的时间的段 时间段不能有交集
let arr=[['5:00','6:00'],['9:00','11:00'],['13:00','14:00'],['1:00','2:00'],['22:00','00:10']]
//时间 排序
timeSort=(arr)=>{
return arr.sort(function (a,b){
return Date.parse(`2000/01/01 ${a[0]}:00`) -Date.parse(`2000/01/01 ${b[0]}:00`)
})
}
// 如果存在 ['22:00','00:10'] 这样格式的 转化为['22:00','23:59'] 和['00:00','00:10']
formatTime(){
let newArr=[...arr]
arr.forEach((item,index)=>{
if(Date.parse(`2000/01/01 ${item[0]}:00`)>Date.parse(`2000/01/01 ${item[1]}:00`)){
newArr.splice(index,1)
newArr.push([item[0],'23:59'])
newArr.push(['00:00',item[1]])
}
})
console.log(newArr);
return newArr
}
//计算方法
time = () => {
let newArr = this.formatTime(arr)
newArr= this.timeSort(newArr) // 时间段进行排序
let aaa= Date.parse(`2000/01/01 00:00:00`) //00:00
let bbb = Date.parse(`2000/01/01 23:59:00`) // 24:00
let leftTime=[]
if(aaa<Date.parse(`2000/01/01 ${arr[0][0]}:00`)){
let startTime = this.timeCheckout(aaa)
let endTime = this.timeCheckout(Date.parse(`2000/01/01 ${arr[0][0]}:00`)-60000)
leftTime.push(`${startTime}~${endTime}`)
}
newArr.forEach((item,index)=>{
if(index==arr.length-1) return
let startTime = this.timeCheckout(Date.parse(`2000/01/01 ${item[1]}:00`)+60000)
let endTime = this.timeCheckout(Date.parse(`2000/01/01 ${newArr[index+1][0]}:00`)-60000)
leftTime.push(`${startTime}~${endTime}`)
})
if(bbb>Date.parse(`2000/01/01 ${newArr[newArr.length-1][1]}:00`)){
let endTime = this.timeCheckout(bbb)
let startTime = this.timeCheckout(Date.parse(`2000/01/01 ${newArr[newArr.length-1][1]}:00`)+60000)
leftTime.push(`${startTime}~${endTime}`)
}
console.log(leftTime);//剩余的时间段
//["00:11~00:59", "02:01~04:59", "06:01~08:59", "11:01~12:59", "14:01~21:59"]
}
写的不好 请见谅 没有把字符串格式的时间 转化为时间错的方法 提出来