/**
* PHP計算兩個時間段是否有交集(邊界重疊不算)
* @param $startDate1 開始日期1
* @param $endDate1 結(jié)束日期1
* @param $startDate2 開始日期2
* @param $endDate2 結(jié)束日期2
*/
function share_date_days($startDate1, $endDate1, $startDate2, $endDate2) {
$days = 0;
$startDate1 = strtotime($startDate1);// 開始日期1
$endDate1 = strtotime($endDate1);// 結(jié)束日期1
$startDate2 = strtotime($startDate2);// 開始日期2
$endDate2 = strtotime($endDate2);// 結(jié)束日期2
/** ------------ 臨界值換算 ------start------ */
// 如果日期1的結(jié)束日期小于日期二的開始日期给梅,則返回0
if ($endDate1 < $startDate2) {
$days = 0;
}
// 如果日期1的開始日期小于日期二的結(jié)束日期,則返回0
if ($startDate1 > $endDate2) {
$days = 0;
}
// 如果日期1的結(jié)束日期等于日期2的開始日期盈魁,則返回1
if ($endDate1 == $startDate2) {
$days = 0;
}
// 如果日期1的開始日期等于日期2的結(jié)束日期桥狡,則返回1
if ($startDate2 == $endDate1) {
$days = 0;
}
/** ------------ 臨界值換算 ------end------ */
/** ------------ 交集換算 ------start------ */
// 如果開始日期1小于開始日期2翅溺,且開始日期2小于結(jié)束小于結(jié)束日期1
if ($startDate1 < $startDate2 && $endDate1 > $startDate2) {
// 如果結(jié)束日期1小于或者等于結(jié)束日期2
if ($endDate1 < $endDate2) {
$days = diffBetweenTwoDays($startDate2, $endDate1);
}
// 如果結(jié)束日期1大于結(jié)束日期2
if ($endDate1 > $endDate2) {
$days = diffBetweenTwoDays($startDate2, $endDate2);
}
}
// 如果開始日期1大于開始日期2,且開始日期1小于結(jié)束日期2
if ($startDate1 > $startDate2 && $startDate1 < $endDate2) {
// 如果結(jié)束日期1小于等于結(jié)束日期2
if ($endDate1 < $endDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate2);
}
// 如果結(jié)束日期1大于結(jié)束日期2
if ($endDate1 > $endDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate2);
}
}
// 開始日期1等于開始日期2
if ($startDate1 == $startDate2) {
// 結(jié)束日期1小于等于結(jié)束日期2
if ($endDate1 < $endDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate1);
}
// 結(jié)束日期1大于結(jié)束日期2
if ($endDate1 > $endDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate2);
}
}
// 結(jié)束日期1等于結(jié)束日期2
if ($endDate1 == $endDate2) {
// 開始日期1小于等于開始日期2
if ($startDate1 < $startDate2) {
$days = diffBetweenTwoDays($startDate2, $endDate1);
}
// 開始日期1大于開始日期2
if ($startDate1 > $startDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate1);
}
}
// 時間段1在時間段2內(nèi)
if ($startDate1 > $startDate2 && $endDate1 < $endDate2) {
$days = diffBetweenTwoDays($startDate1, $endDate1);
}
// 時間段1包含時間段2
if ($startDate1 < $startDate2 && $endDate1 > $endDate2) {
$days = diffBetweenTwoDays($startDate2, $endDate2);
}
/** ------------ 交集換算 ------end------ */
return $days;
}
/**
* 求兩個日期之間相差的天數(shù)
* (針對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 round(($day1 - $day2) / 86400, 3).' D';
}
$beginTime1 = ('2015-08-07 06:30');
$endTime1 = ('2015-08-07 15:30');
$beginTime2 = ('2015-08-07 02:30');
$endTime2 = ('2015-08-07 21:31');
echo share_date_days($beginTime1, $endTime1, $beginTime2, $endTime2);//0.375 D
PHP計算兩個時間段是否有交集
最后編輯于 :
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門票罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泞边,你說我怎么就攤上這事该押。” “怎么了阵谚?”我有些...
- 文/不壞的土叔 我叫張陵蚕礼,是天一觀的道長。 經(jīng)常有香客問我梢什,道長奠蹬,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任嗡午,我火速辦了婚禮囤躁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己割以,他們只是感情好金度,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著严沥,像睡著了一般猜极。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上消玄,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坟桅!你這毒婦竟也來了华望?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布焦人,位于F島的核電站,受9級特大地震影響重父,放射性物質(zhì)發(fā)生泄漏花椭。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一房午、第九天 我趴在偏房一處隱蔽的房頂上張望矿辽。 院中可真熱鬧,春花似錦、人聲如沸袋倔。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽宾娜。三九已至批狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間前塔,已是汗流浹背嚣艇。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 在創(chuàng)建的工程目錄下找到 Config 文件夾膊升,在該文件夾中創(chuàng)建一個新的 .ini 文件:DefaultGameUs...