计算 2 个或更多日期是否重叠


Calculate if 2 or more dates overlap

有没有一种有效的方法来计算 PHP 中 2 个或更多日期是否重叠?

前任。

  • 日期 1: 开始 1 = 2012-03-10/结束 1 = 2012-05-10
  • 日期 2: 开始 2 = 2012-04-25/结束 2 = 2012-06-01
  • 日期 3: 开始 3 = 2012-07-15/结束 3 = 2012-08-20

在上面的示例中,Date1 和 Date2 重叠,Date3 正常。

如果你的日期是 YYYY-MM-DD 格式,那么你可以做一个字符串比较(如果使用 strtotime() 作为 unix 时间戳,它们不一定是 1970 年之后的有效日期)

if( ($date1['start']>=$date2['start'] && $date1['start']<=$date2['end']) || ($date1['end']>=$date2['start'] && $date1['end']<=$date2['end']) || ($date1['start']<=$date2['start'] && $date1['end']>=$date2['end']) )
{
    // overlap
}
这将检查日期 1 的开始或结束是否在日期 2

的开始和结束之间,或者 date1 是否围绕日期 2

.

感谢@Germann-阿灵顿 -

if($date1['start']<=$date2['end'] && $date2['start']<=$date1['end']) { // overlap }
如果你

有一堆日期(据我了解这个问题),你可以使用间隔树,并将日期转换为整数(可以使用unix时间)