本文实例讲述了php计算两个日期相差天数的方法。分享给大家供大家参考。具体实现方法如下:
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?php $date1 = date ( 'Y-m-d' ); $date2 = "2015-12-04" ; $diff = abs ( strtotime ( $date2 ) - strtotime ( $date1 )); $years = floor ( $diff / (365*60*60*24)); $months = floor (( $diff - $years * 365*60*60*24) / (30*60*60*24)); $days = floor (( $diff - $years * 365*60*60*24 - $months *30*60*60*24)/ (60*60*24)); printf( "%d years, %d months, %d days\n" , $years , $months , $days ); -------------------------------------------------------- OR $date1 = new DateTime( "2007-03-24" ); $date2 = new DateTime( "2009-06-26" ); $interval = $date1 ->diff( $date2 ); echo "difference " . $interval ->y . " years, " . $interval ->m. " months, " . $interval ->d. " days " ; // shows the total amount of days (not divided into years, months and days like above) echo "difference " . $interval ->days . " days " ; -------------------------------------------------------- OR /** * Calculate differences between two dates with precise semantics. Based on PHPs DateTime::diff() * implementation by Derick Rethans. Ported to PHP by Emil H, 2011-05-02. No rights reserved. */ function _date_range_limit( $start , $end , $adj , $a , $b , $result ) { if ( $result [ $a ] < $start ) { $result [ $b ] -= intval (( $start - $result [ $a ] - 1) / $adj ) + 1; $result [ $a ] += $adj * intval (( $start - $result [ $a ] - 1) / $adj + 1); } if ( $result [ $a ] >= $end ) { $result [ $b ] += intval ( $result [ $a ] / $adj ); $result [ $a ] -= $adj * intval ( $result [ $a ] / $adj ); } return $result ; } function _date_range_limit_days( $base , $result ) { $days_in_month_leap = array (31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $days_in_month = array (31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); _date_range_limit(1, 13, 12, "m" , "y" , & $base ); $year = $base [ "y" ]; $month = $base [ "m" ]; if (! $result [ "invert" ]) { while ( $result [ "d" ] < 0) { $month --; if ( $month < 1) { $month += 12; $year --; } $leapyear = $year % 400 == 0 || ( $year % 100 != 0 && $year % 4 == 0); $days = $leapyear ? $days_in_month_leap [ $month ] : $days_in_month [ $month ]; $result [ "d" ] += $days ; $result [ "m" ]--; } } else { while ( $result [ "d" ] < 0) { $leapyear = $year % 400 == 0 || ( $year % 100 != 0 && $year % 4 == 0); $days = $leapyear ? $days_in_month_leap [ $month ] : $days_in_month [ $month ]; $result [ "d" ] += $days ; $result [ "m" ]--; $month ++; if ( $month > 12) { $month -= 12; $year ++; } } } return $result ; } function _date_normalize( $base , $result ) { $result = _date_range_limit(0, 60, 60, "s" , "i" , $result ); $result = _date_range_limit(0, 60, 60, "i" , "h" , $result ); $result = _date_range_limit(0, 24, 24, "h" , "d" , $result ); $result = _date_range_limit(0, 12, 12, "m" , "y" , $result ); $result = _date_range_limit_days(& $base , & $result ); $result = _date_range_limit(0, 12, 12, "m" , "y" , $result ); return $result ; } /** * Accepts two unix timestamps. */ function _date_diff( $one , $two ) { $invert = false; if ( $one > $two ) { list( $one , $two ) = array ( $two , $one ); $invert = true; } $key = array ( "y" , "m" , "d" , "h" , "i" , "s" ); $a = array_combine ( $key , array_map ( "intval" , explode ( " " , date ( "Y m d H i s" , $one )))); $b = array_combine ( $key , array_map ( "intval" , explode ( " " , date ( "Y m d H i s" , $two )))); $result = array (); $result [ "y" ] = $b [ "y" ] - $a [ "y" ]; $result [ "m" ] = $b [ "m" ] - $a [ "m" ]; $result [ "d" ] = $b [ "d" ] - $a [ "d" ]; $result [ "h" ] = $b [ "h" ] - $a [ "h" ]; $result [ "i" ] = $b [ "i" ] - $a [ "i" ]; $result [ "s" ] = $b [ "s" ] - $a [ "s" ]; $result [ "invert" ] = $invert ? 1 : 0; $result [ "days" ] = intval ( abs (( $one - $two )/86400)); if ( $invert ) { _date_normalize(& $a , & $result ); } else { _date_normalize(& $b , & $result ); } return $result ; } $date = "2014-12-04 19:37:22" ; echo '<pre>' ; print_r( _date_diff( strtotime ( $date ), time() ) ); echo '</pre>' ; ?> |
希望本文所述对大家学习php程序设计有所帮助。