本篇文章给大家通过代码示例介绍一下PHP如何计算两个时间段交集的天数。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

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

/** * 计算两个时间段之间交集的天数 * @param $startDate1 开始日期1 * @param $endDate1 结束日期1 * @param $startDate2 开始日期2 * @param $endDate2 结束日期2 */public function share_date_days($startDate1, $endDate1, $startDate2, $endDate2){  $days = 0;  $startDate1 = strtotime($startDate1);// 开始日期1  $endDate1 = strtotime($endDate1);// 结束日期1  $startDate2 = strtotime($startDate2);// 开始日期2  $endDate2 = strtotime($endDate2);// 结束日期2    /** ------------ 临界值换算 ------start------ */  // 如果日期1的结束日期小于日期二的开始日期,则返回0  if($endDate1 < $startDate2){    $days = 0;  }  // 如果日期1的开始日期小于日期二的结束日期,则返回0  if($startDate1 > $endDate2){    $days = 0;  }  // 如果日期1的结束日期等于日期2的开始日期,则返回1  if($endDate1 == $startDate2){    $days = 1;  }  // 如果日期1的开始日期等于日期2的结束日期,则返回1  if($startDate2 == $endDate1){    $days = 1;  }  /** ------------ 临界值换算 ------end------ */    /** ------------ 交集换算 ------start------ */  // 如果开始日期1小于开始日期2,且开始日期2小于结束小于结束日期1  if($startDate1 < $startDate2 && $endDate1 > $startDate2){    // 如果结束日期1小于或者等于结束日期2    if($endDate1 <= $endDate2){      $days = $this->diffBetweenTwoDays($startDate2, $endDate1) + 1;    }    // 如果结束日期1大于结束日期2    if($endDate1 > $endDate2){      $days = $this->diffBetweenTwoDays($startDate2, $endDate2) + 1;    }  }    // 如果开始日期1大于开始日期2,且开始日期1小于结束日期2  if($startDate1 > $startDate2 && $startDate1 < $endDate2){    // 如果结束日期1小于等于结束日期2    if($endDate1 <= $endDate2){      $days = $this->diffBetweenTwoDays($startDate1, $endDate2) + 1;    }    // 如果结束日期1大于结束日期2    if($endDate1 > $endDate2){      $days = $this->diffBetweenTwoDays($startDate1, $endDate2) + 1;    }  }  // 开始日期1等于开始日期2  if($startDate1 == $startDate2){    // 结束日期1小于等于结束日期2    if($endDate1 <= $endDate2){      $days = $this->diffBetweenTwoDays($startDate1, $endDate1) + 1;    }    // 结束日期1大于结束日期2    if($endDate1 > $endDate2){      $days = $this->diffBetweenTwoDays($startDate1, $endDate2) + 1;    }  }  // 结束日期1等于结束日期2  if($endDate1 == $endDate2){    // 开始日期1小于等于开始日期2    if($startDate1 <= $startDate2){      $days = $this->diffBetweenTwoDays($startDate2, $endDate1) + 1;    }    // 开始日期1大于开始日期2    if($startDate1 > $startDate2){      $days = $this->diffBetweenTwoDays($startDate1, $endDate1) + 1;    }    }  // 时间段1在时间段2内  if($startDate1 >= $startDate2 && $endDate1 <= $endDate2){    $days = $this->diffBetweenTwoDays($startDate1, $endDate1) + 1;  }  // 时间段1包含时间段2  if($startDate1 < $startDate2 && $endDate1 > $endDate2){    $days = $this->diffBetweenTwoDays($startDate2, $endDate2) + 1;  }  /** ------------ 交集换算 ------end------ */    return $days;}
/** * 求两个日期之间相差的天数 * (针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day2 * @return number */function diffBetweenTwoDays($day1, $day2){  if ($day1 < $day2) {    $tmp = $day2;    $day2 = $day1;    $day1 = $tmp;  }  return ($day1 - $day2) / 86400;}

推荐学习:PHP视频教程

更多相关文章

  1. PHP时间戳和日期格式相互转换
  2. php获取当前时间戳、日期并精确到毫秒(三种方法)
  3. php如何设置日期
  4. php之日期时间操作一箩筐
  5. php日期格式化方法详解
  6. php关于日期时间的操作

随机推荐

  1. Android(安卓)Serializable与Parcelable
  2. Android毛玻璃效果
  3. Android(安卓)Lint分类及常见错误
  4. Frame Animation帧播放动画
  5. ContentProvider使用与query流程分析
  6. android 程序中运行main方法
  7. Android开发实现计算器的例子
  8. android 学习网站
  9. Android 线程归纳
  10. android build error : android the corr