廢話不多說,我就直接上代碼吧!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/** * 計(jì)算兩個(gè)時(shí)間段之間交集的天數(shù) * @param $startDate1 開始日期1 * @param $endDate1 結(jié)束日期1 * @param $startDate2 開始日期2 * @param $endDate2 結(jié)束日期2 */ public 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 = 1; } // 如果日期1的開始日期等于日期2的結(jié)束日期,則返回1 if ( $startDate2 == $endDate1 ){ $days = 1; } /** ------------ 臨界值換算 ------end------ */ /** ------------ 交集換算 ------start------ */ // 如果開始日期1小于開始日期2,且開始日期2小于結(jié)束小于結(jié)束日期1 if ( $startDate1 < $startDate2 && $endDate1 > $startDate2 ){ // 如果結(jié)束日期1小于或者等于結(jié)束日期2 if ( $endDate1 <= $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate2 , $endDate1 ) + 1; } // 如果結(jié)束日期1大于結(jié)束日期2 if ( $endDate1 > $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate2 , $endDate2 ) + 1; } } // 如果開始日期1大于開始日期2,且開始日期1小于結(jié)束日期2 if ( $startDate1 > $startDate2 && $startDate1 < $endDate2 ){ // 如果結(jié)束日期1小于等于結(jié)束日期2 if ( $endDate1 <= $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate1 , $endDate2 ) + 1; } // 如果結(jié)束日期1大于結(jié)束日期2 if ( $endDate1 > $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate1 , $endDate2 ) + 1; } } // 開始日期1等于開始日期2 if ( $startDate1 == $startDate2 ){ // 結(jié)束日期1小于等于結(jié)束日期2 if ( $endDate1 <= $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate1 , $endDate1 ) + 1; } // 結(jié)束日期1大于結(jié)束日期2 if ( $endDate1 > $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate1 , $endDate2 ) + 1; } } // 結(jié)束日期1等于結(jié)束日期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; } } // 時(shí)間段1在時(shí)間段2內(nèi) if ( $startDate1 >= $startDate2 && $endDate1 <= $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate1 , $endDate1 ) + 1; } // 時(shí)間段1包含時(shí)間段2 if ( $startDate1 < $startDate2 && $endDate1 > $endDate2 ){ $days = $this ->diffBetweenTwoDays( $startDate2 , $endDate2 ) + 1; } /** ------------ 交集換算 ------end------ */ return $days ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** * 求兩個(gè)日期之間相差的天數(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 ( $day1 - $day2 ) / 86400; } |
以上這篇PHP 計(jì)算兩個(gè)時(shí)間段之間交集的天數(shù)示例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/u013331641/article/details/77714696