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

时间:2012-08-15 10:20:42

标签: php algorithm

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

实施例。

  • 日期1: Start1 = 2012-03-10 / End1 = 2012-05-10
  • 日期2: Start2 = 2012-04-25 / End2 = 2012-06-01
  • 日期3: Start3 = 2012-07-15 / End3 = 2012-08-20

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

2 个答案:

答案 0 :(得分:2)

如果您的日期是YYYY-MM-DD格式,那么您可以进行字符串比较(如果使用strtotime()进行unix时间戳,则它们不必是1970年后的OR有效日期)

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的开始和结束之间2或者date1是否包含date2

感谢@ Germann-Arlington -

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

答案 1 :(得分:1)

如果您有大量日期(我理解问题)您可以使用interval tree,并将日期转换为整数(可以使用unix time