温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用PHP怎么计算两个时间段的交集

发布时间:2021-04-14 16:26:35 阅读:411 作者:Leah 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

今天就跟大家聊聊有关使用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怎么计算两个时间段的交集有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×