本文实例讲述了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程序设计有所帮助。