PHP中怎么求两个时间段的交集,方法是什么
Admin 2022-05-31 群英技术资讯 938 次浏览
废话不多说,我就直接上代码吧!
/** * 计算两个时间段之间交集的天数 * @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; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
魔术方法是PHP面向对象中特有的特性。它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法)。魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法。1.__construct,__destruct__constuct构建对象的时被调用;__destruct明确销毁对象或脚本结束时被
对于PHP学习,PHP和MySQL是结合使用的,因此我们是需要掌握php连接mysql的方法的。我们在PHP连接MySQL数据库的时候,可以用mysql_connect()与mysqli_connect()这两个函数来检测是否连接成功,但是很多人不清楚两者的区别,下面我们通过实例来了解一下mysql_connect()与mysqli_connect()的区别。
在本篇文章里小编给大家整理了一篇关于php memcached的实例用法内容,有兴趣的朋友们可以跟着学习参考下。
有时候我们需要使用正则表达式的预查功能,因此就需要了解正向预查与反向预查,这篇问文章就主要给大家介绍正向预查与反向预查的作用以及用法,具有一定的参考价值,感兴趣的朋友就继续往下看吧。
这篇文章给大家分享的是基于PDO实现学生信息管理系统的思路以及代码,对于大家学习PDO实现管理系统具有一定的借鉴价值,下面就一起跟随小编学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008