1

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

前任。

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

在上面的例子中 Date1 和 Date2 重叠,Date3 是可以的。

4

2 回答 2

2

如果您的日期是 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
}

这将检查 date1 的开始或结束是否在 date2 的开始和结束之间,或者 date1 是否围绕 date2

.

感谢@Germann-Arlington -

if($date1['start']<=$date2['end'] && $date2['start']<=$date1['end']) { // overlap }
于 2012-08-15T10:30:12.687 回答
1

如果您有一堆日期(据我了解问题),您可以使用区间树,并将日期转换为整数(可以使用unix 时间)

于 2012-08-15T10:25:27.443 回答