gpt4 book ai didi

javascript - 使用 moment 检查时间是否重叠?

转载 作者:可可西里 更新时间:2023-11-01 02:34:36 24 4
gpt4 key购买 nike

我有一组 [start_time, end_time] 时间范围,如下所示:

let timeSegments = [];
timeSegments.push(["02:00", "07:00"])
timeSegments.push(["03:00", "04:00"])

这些时间段重叠,因为 2AM - 7AM 包括 3AM - 4AM

同样:

let timeSegments = [];
timeSegments.push(["14:00", "18:00"])
timeSegments.push(["15:00", "19:00"])

2PM6PM3PM7PM 重叠。

我正在使用 momentjs 库,想知道一种方法来确定我的 timeSegments 数组是否包含任何重叠的 timeSegments? timeSegments 数组最多可以包含 10 个 [start_time, end_time] 对。谢谢!

我只想知道是否有任何段重叠(真/假),我不需要知道哪些段重叠等。

最佳答案

您可以按 start_time(使用 Array.prototype.sort)对 timeSegments 进行排序,然后遍历排序后的列表并检查 end_time 是否为当前 timeSegment大于下一个的 start_time

如果发生这种情况,则存在重叠。

您可以在下面看到一个实现示例:

const checkOverlap = (timeSegments) => {
if (timeSegments.length === 1) return false;

timeSegments.sort((timeSegment1, timeSegment2) =>
timeSegment1[0].localeCompare(timeSegment2[0])
);

for (let i = 0; i < timeSegments.length - 1; i++) {
const currentEndTime = timeSegments[i][1];
const nextStartTime = timeSegments[i + 1][0];

if (currentEndTime > nextStartTime) {
return true;
}
}

return false;
};

const timeSegments1 = [
["03:00", "04:00"],
["02:00", "07:00"],
["12:00", "15:00"]
];

const timeSegments2 = [
["05:00", "07:00"],
["03:00", "04:00"],
["12:00", "15:00"]
];

console.log(checkOverlap(timeSegments1)); // prints true
console.log(checkOverlap(timeSegments2)); // prints false

请注意,Array.prototype.sort 改变数组,就地执行排序。如果您想保留传递给 checkOverlap 的数组(这通常是一种很好的做法),您可以创建 timeSegments 的副本(使用 spread syntax ,例如):

const sortedTimeSegments = [...timeSegments].sort(...);

关于javascript - 使用 moment 检查时间是否重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com