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


Posted in PHP onOctober 24, 2019

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

/**
 * 计算两个时间段之间交集的天数
 * @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 相关文章推荐
杏林同学录(四)
Oct 09 PHP
解决GD中文乱码问题
Feb 14 PHP
比较详细PHP生成静态页面教程
Jan 10 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 #PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 #PHP
Laravel实现ORM带条件搜索分页
Oct 24 #PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 #PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 #PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 #PHP
浅谈laravel aliases别名的原理
Oct 24 #PHP
You might like
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
Python与Java间Socket通信实例代码
2017/03/06 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
python实现计算器功能
2019/10/31 Python
python 如何停止一个死循环的线程
2020/11/24 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
C#笔试题
2015/07/14 面试题
我的教育故事演讲稿
2014/05/04 职场文书
房地产开发项目建议书
2014/05/16 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
写给父母的感谢信
2015/01/22 职场文书
公司管理建议书
2015/09/14 职场文书