如何对时间段进行交叉重复的判断?

现有一组四个select,起始1组,动态添加,最多10组,
要对00:00至23:59的时间段进行切割,且不能有重复交叉的区域,
应该如何进行计算监听呢?完全没有思路...
想跟大家讨论讨论...
图片描述

html结构如图
图片描述

对其中开始时间小时的监听 其他类似
图片描述

阅读 8.5k
2 个回答

将0:00-23:59抽象为一个一维坐标轴。
每个时间段都可以看作该轴上的一段长度。

方法一:
将所有时间段左边界和右边界的坐标存入数组并排序,然后依次遍历,确保第2n个和第2n+1个坐标是同一时间段的两段坐标,否则即表示有重叠。

方法二:
保存时间段中点坐标和“半径”,根据中点坐标排序,判断任意两个时间段是否重叠可以检测两个中点的距离是否大于双方半径之和,不大于即表示有重叠。

利用好Date对象的getTimed\转换为数字判断间隔
var formatTime = function(str){
  var times = new Date();
  return  [times.getFullYear(),times.getMonth()+1,times.getDate()].join('-') 
}
var time2num = function(str){return new Date(formatTime()+' ' +x).getTime()}
那么 11:00到12:00就是
[time2num('11:00'),time2num('12:00')]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题