PHP 计算两个时间段之间交集的天数示例
废话不多说,我就直接上代码吧!
/**
*计算两个时间段之间交集的天数
*@param$startDate1开始日期1
*@param$endDate1结束日期1
*@param$startDate2开始日期2
*@param$endDate2结束日期2
*/
publicfunctionshare_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日之后,求之前可以采用泰勒公式)
*@paramstring$day1
*@paramstring$day2
*@returnnumber
*/
functiondiffBetweenTwoDays($day1,$day2)
{
if($day1<$day2){
$tmp=$day2;
$day2=$day1;
$day1=$tmp;
}
return($day1-$day2)/86400;
}
以上这篇PHP计算两个时间段之间交集的天数示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。