项目中遇到一个需求判断所选时间段是否选完一天 如
[
{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
}