当我使用YYYY-MM-DDTHH:MM:SSZ
格式时,我用于检查两个日期范围是否重叠的功能不起作用
日期rent2
和book2
的第二个示例具有相同的日期,但是时间不同,因此它不应检测到重叠
const rent = {
start: new Date("2019-03-10"),
end: new Date("2019-03-14")
}
const book = {
start: new Date("2019-03-15"),
end: new Date("2019-03-18"),
}
const rent2 = {
start: new Date("2019-03-10T01:00:00Z"),
end: new Date("2019-03-14T10:00:00Z")
}
const book2 = {
start: new Date("2019-03-10T12:00:00Z"),
end: new Date("2019-03-14T15:00:00Z"),
}
function isOverlapping(startOne, endOne, startTwo, endTwo) {
startOne = startOne.getTime();
startTwo = startTwo.getTime();
endOne = endOne.getTime();
endTwo = endTwo.getTime();
return !(endOne <= startTwo || startOne >= endTwo);
}
console.log("First: ", isOverlapping(rent.start, rent.end, book.start, book.end));
console.log("Second: ", isOverlapping(rent2.start, rent2.end, book2.start, book2.end));
答案 0 :(得分:0)
您的函数运行良好-randint()
和rent
不重叠,而book
和rent2
确实重叠。
如果需要计算两个日期范围之间的实际重叠量,则可以使用以下函数:
book2
如果结果为非零-则存在重叠。
该公式假设一个范围完全包含在另一个范围内-因此它计算包含范围的长度,然后尝试减去包含范围的2个间隔(在左侧和右侧)查找重叠量的范围。如果左侧或右侧间隔结果均为负,则将它们的上限设置为0。
答案 1 :(得分:0)
它与时间本身无关。但是由于您的布尔翻转,它会变得有些棘手。
案例1
("2019-03-14" <= "2019-03-15" || "2019-03-10" >= "2019-03-18")
_____________true____________________________false____________
因为它是or
=>返回true
...然后翻转到false
案例2
("2019-03-14T10:00:00Z" <= "2019-03-10T12:00:00Z")
______________________false_______________________
||
"2019-03-10T01:00:00Z" >= "2019-03-14T15:00:00Z")
______________________false_______________________
没有true
,因此返回了false
...然后翻转到true
例如,我建议看一下该线程: Determine Whether Two Date Ranges Overlap