我有一个事件,其中包含将要举办的研讨会列表。每个研讨会可以召开多次 session 。界面如下所示:
interface Workshop {
...
meetings: WorkshopMeeting[];
}
interface WorkshopMeeting {
id: number;
startDate: Date;
endDate: Date;
}
我的最终对象有一系列 Workshop,例如:
const event = {
// ... other data
workshops: [] as Workshop[]
}
我需要的是找出所有研讨会的 session 之间是否有交集。
例如,我的事件有 2 个工作坊,第一个工作坊计划于 29/03/2022 14:00 开始并于 29/03/2022 18:00 结束,而我的第二个工作坊计划于29/03/2022: 15:00 并于 29/03/2022: 20:00 结束。在本例中,研讨会 2 的 session 与研讨会 1 的 session 同时举行。
我正在尝试创建一个算法来查找这些日期冲突,但我没有取得很好的进展。
我尝试了一些循环,但找不到比较逻辑
最佳答案
Moment JS 可以帮助你:
const date1 = [moment("2016-12-06 11:00"), moment("2016-12-06 12:00")];
const date2 = [moment("2016-12-06 10:00"), moment("2016-12-06 13:00")];
const range = moment.range(date1);
const range2 = moment.range(date2);
// has overlapping
if(range.overlaps(range2)) {
if((range2.contains(range, true) || range.contains(range2, true)) && !date1[0].isSame(date2[0]))
alert("time range 1 is completely conflict with time range 2 and vice versa");
else
alert("time range 1 is partially conflict with time range 2 and vice versa");
关于javascript - 如何使用 JavaScript 查找日期数组中的日期交叉点/冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71665715/