如何在PHP中找到重叠的dateperiods/date范围?

Dus*_*tin 2 php datetime compare date overlap

如果我有两个日期范围(例如5月1日 - 5月31日和5月23日 - 6月5日),那么最好的方法是找出这两个时期在PHP中重叠的天数(因此会返回9)?有没有办法使用DatePeriod对象?

编辑(希望)澄清我的问题:

基本上我想要一个函数,给定任何两个日期范围,将返回两个日期范围之间共同的天数.如果有重叠,它将返回重叠天数,否则它将返回0.我认为这可以通过为每个范围创建一个日期数组,循环遍历它们以查找相同的日期,并使用变量来计算比赛的数量 - 但我正在寻找更优雅的东西.

Dus*_*tin 26

感谢@ phpisuber01并确定两个日期范围重叠是否提供了基本逻辑.这四个变量需要是DateTime对象:

function datesOverlap($start_one,$end_one,$start_two,$end_two) {

   if($start_one <= $end_two && $end_one >= $start_two) { //If the dates overlap
        return min($end_one,$end_two)->diff(max($start_two,$start_one))->days + 1; //return how many days overlap
   }

   return 0; //Return 0 if there is no overlap
}
Run Code Online (Sandbox Code Playgroud)

  • 要完成,也可以使用相反的方法:if(($ start_one <= $ end_two && $ end_one> = $ start_two)||($ start_two <= $ end_one && $ end_two> = $ start_one)){... } (7认同)