百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP怎样盘算两个工夫段交集的天数?
分享文章到:

PHP怎样盘算两个工夫段交集的天数?

发布时间:09/01 来源:未知 浏览: 关键词:
本篇文章给大家通过代码示例介绍一下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视频教程

以上就是PHP怎样运算两个时间段交集的天数?的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板