当前位置:首页 > PHP教程 > php日期 > 列表

PHP 计算两个时间段之间交集的天数示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-17 10:26:04 浏览: 评论:0 

今天小编就为大家分享一篇PHP 计算两个时间段之间交集的天数示例,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

废话不多说,我就直接上代码吧!

  1. /** 
  2.  * 计算两个时间段之间交集的天数 
  3.  * @param $startDate1 开始日期1 
  4.  * @param $endDate1 结束日期1 
  5.  * @param $startDate2 开始日期2 
  6.  * @param $endDate2 结束日期2 
  7.  */ 
  8. public function share_date_days($startDate1$endDate1$startDate2$endDate2
  9.   $days = 0; 
  10.   $startDate1 = strtotime($startDate1);// 开始日期1 
  11.   $endDate1 = strtotime($endDate1);// 结束日期1 
  12.   $startDate2 = strtotime($startDate2);// 开始日期2 
  13.   $endDate2 = strtotime($endDate2);// 结束日期2 
  14.    
  15.   /** ------------ 临界值换算 ------start------ */ 
  16.   // 如果日期1的结束日期小于日期二的开始日期,则返回0 
  17.   if($endDate1 < $startDate2){ 
  18.     $days = 0; 
  19.   } 
  20.   // 如果日期1的开始日期小于日期二的结束日期,则返回0 
  21.   if($startDate1 > $endDate2){ 
  22.     $days = 0; 
  23.   } 
  24.   // 如果日期1的结束日期等于日期2的开始日期,则返回1 
  25.   if($endDate1 == $startDate2){ 
  26.     $days = 1; 
  27.   } 
  28.   // 如果日期1的开始日期等于日期2的结束日期,则返回1 
  29.   if($startDate2 == $endDate1){ 
  30.     $days = 1; 
  31.   } 
  32.   /** ------------ 临界值换算 ------end------ */ 
  33.    
  34.   /** ------------ 交集换算 ------start------ */ 
  35.   // 如果开始日期1小于开始日期2,且开始日期2小于结束小于结束日期1 
  36.   if($startDate1 < $startDate2 && $endDate1 > $startDate2){ 
  37.     // 如果结束日期1小于或者等于结束日期2 
  38.     if($endDate1 <= $endDate2){ 
  39.       $days = $this->diffBetweenTwoDays($startDate2$endDate1) + 1; 
  40.     } 
  41.     // 如果结束日期1大于结束日期2 
  42.     if($endDate1 > $endDate2){ 
  43.       $days = $this->diffBetweenTwoDays($startDate2$endDate2) + 1; 
  44.     } 
  45.   } 
  46.    
  47.   // 如果开始日期1大于开始日期2,且开始日期1小于结束日期2 
  48.   if($startDate1 > $startDate2 && $startDate1 < $endDate2){ 
  49.     // 如果结束日期1小于等于结束日期2 
  50.     if($endDate1 <= $endDate2){ 
  51.       $days = $this->diffBetweenTwoDays($startDate1$endDate2) + 1; 
  52.     } 
  53.     // 如果结束日期1大于结束日期2 
  54.     if($endDate1 > $endDate2){ 
  55.       $days = $this->diffBetweenTwoDays($startDate1$endDate2) + 1; 
  56.     } 
  57.   } 
  58.   // 开始日期1等于开始日期2 
  59.   if($startDate1 == $startDate2){ 
  60.     // 结束日期1小于等于结束日期2 
  61.     if($endDate1 <= $endDate2){ 
  62.       $days = $this->diffBetweenTwoDays($startDate1$endDate1) + 1; 
  63.     } 
  64.     // 结束日期1大于结束日期2 
  65.     if($endDate1 > $endDate2){ 
  66.       $days = $this->diffBetweenTwoDays($startDate1$endDate2) + 1; 
  67.     } 
  68.   } 
  69.   // 结束日期1等于结束日期2 
  70.   if($endDate1 == $endDate2){ 
  71.     // 开始日期1小于等于开始日期2 
  72.     if($startDate1 <= $startDate2){ 
  73.       $days = $this->diffBetweenTwoDays($startDate2$endDate1) + 1; 
  74.     } 
  75.     // 开始日期1大于开始日期2 
  76.     if($startDate1 > $startDate2){ 
  77.       $days = $this->diffBetweenTwoDays($startDate1$endDate1) + 1; 
  78.     } 
  79.    
  80.   } 
  81.   // 时间段1在时间段2内 
  82.   if($startDate1 >= $startDate2 && $endDate1 <= $endDate2){ 
  83.     $days = $this->diffBetweenTwoDays($startDate1$endDate1) + 1; 
  84.   } 
  85.   // 时间段1包含时间段2 
  86.   if($startDate1 < $startDate2 && $endDate1 > $endDate2){ 
  87.     $days = $this->diffBetweenTwoDays($startDate2$endDate2) + 1; 
  88.   } 
  89.   /** ------------ 交集换算 ------end------ */ 
  90.    
  91.   return $days
  92.  
  93. /** 
  94.  * 求两个日期之间相差的天数 
  95.  * (针对1970年1月1日之后,求之前可以采用泰勒公式) 
  96.  * @param string $day1 
  97.  * @param string $day2 
  98.  * @return number 
  99.  */ 
  100. function diffBetweenTwoDays($day1$day2
  101.   if ($day1 < $day2) { 
  102.     $tmp = $day2
  103.     $day2 = $day1
  104.     $day1 = $tmp
  105.   } 
  106.   return ($day1 - $day2) / 86400; 
  107. }

Tags: PHP计算两个时间段

分享到: