js 判断选择时间段是否选满一天24小时

135 阅读1分钟

项目中遇到一个需求判断所选时间段是否选完一天 如

[
 {start:'00:00',end:'05:00'},
 {start:'05:00',end:'12:00'},
 {start:'12:00',end:'18:00'},
 {start:'18:00',end:'24:00'},
]

这样的一组数据即为选满了一天 反之如下

[
 {start:'00:00',end:'05:00'},
 {start:'05:00',end:'10:00'},
 {start:'12:00',end:'18:00'},
 {start:'18:00',end:'24:00'},
]

这样的数据即没有选满一天

实现思路如下 1.将数组的开始时间和结束时间 转换为分钟 2.通过结束时间减去开始时间累加即可实现 或通过判断 当前item的结束时间与下一个item的开始时间进行判断是否相等来判断 完整代码如下

 function parseTimeOne(timeStr) {
  const [hours, minutes] = timeStr.split(':').map(Number)
  return hours * 60 + (minutes || 0)
}
function isCompleteCoverage(periods) {
  const parsedPeriods = periods.map(period => ({
    start: parseTimeOne(period.start),
    end: parseTimeOne(period.end)
  }))
  parsedPeriods.sort((a, b) => a.start - b.start)

  let totalCoverage = 0
  for (let i = 0; i < parsedPeriods.length; i++) {
    const currentPeriod = parsedPeriods[i]
    const nextPeriod = parsedPeriods[i + 1]
    totalCoverage += currentPeriod.end - currentPeriod.start
    if (nextPeriod && currentPeriod.end < nextPeriod.start) {
      return false // 有空档
    }
  }
  // 判断总时间是否等于24小时
  return totalCoverage === 1440
}