以上图片选择了时间段 现在需要判断 当前选择的时间段 不能够是 有交叉的所以现在需要循环判断
//判断时间段是否重叠交叉
export function areIntervalsNonOverlapping(intervals:any) {
// 辅助函数:将时间字符串转换为从当天午夜开始计算的分钟数
function convertToMinutes(timeString:any) {
const [hours, minutes, seconds] = timeString.split(':').map(Number)
return hours * 60 + minutes // 忽略秒数,如果需要更高精度可以加上 seconds
}
// 转换时间并排序
const sortedIntervals = intervals
.map(interval => ({
...interval,
beginMinutes: convertToMinutes(interval.polishBeginTime),
endMinutes: convertToMinutes(interval.polishEndTime),
}))
.sort((a, b) => a.beginMinutes - b.beginMinutes)
// 检查重叠
for (let i = 1; i < sortedIntervals.length; i++) {
const current = sortedIntervals[i]
const previous = sortedIntervals[i - 1]
// 处理跨越午夜的情况
if (
current.beginMinutes < previous.endMinutes ||
(current.beginMinutes === 0 && previous.endMinutes > 23 * 60)
) {
return false // 重叠
}
}
return true // 没有重叠
}
以上就是这个算法
传入数组 就可以
我的数组格式 是
[
{
//判断时间段是否重叠交叉
polishBeginTime:"01:00:00"
polishEndTime:"02:00:00"
}
]