可能重复:
确定两个日期范围是否重叠
我正在尝试确定 PHP 中的两个时间范围是否重叠。在我最初的尝试中,我一直在参考确定两个日期范围是否重叠,但是,它并不匹配所有情况。如果一个时间范围嵌套在另一个时间范围的开始时间和结束时间之间,则不匹配。如果它与班次的开始或结束重叠,或者班次完全匹配,则它按预期工作。
看看我在说什么的这张图片:
基本上,如果橙色变化与任何地方的任何红色变化重叠,我会尝试隐藏它们。这是我试图用来实现这一点的代码的相关部分。
if(($red['start'] <= $orange['end']) && ($red['end'] >= $orange['start'])) {
//Conflict handling
}
变量的值是 UNIX 时间戳。从逻辑上处理这些数字,我理解为什么上面的陈述失败了。显然,我可以做更多的逻辑来确定一个班次是否属于另一个班次(这是我可能需要做的),但我希望有一个更普遍的捕获。
编辑:添加每个块的开始和结束时间的值。我同意我所拥有的应该工作。事实上,它不是我的问题所在。我可能忽略了一些愚蠢的事情。
orange-start = 1352899800
orange-end = 1352907000
red-start = 1352923200
red-end = 1352926200
因此我的逻辑会说:
if((1352923200 <= 1352907000) && (1352926200 >= 1352899800))
因此,在此之后,第一次比较失败。
编辑 2:看起来我的逻辑是合理的(我认为是这种情况),我的问题与 UNIX 时间戳有关,与显示的实际时间不匹配。我感谢那些与我一起工作的人,并帮助我发现问题所在。我希望我能接受安德烈和杰森的回答。