<?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 "
;
echo
"difference "
.
$interval
->days .
" days "
;
-------------------------------------------------------- OR
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
;
}
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 class="brush:php;toolbar:false">'
;
print_r( _date_diff(
strtotime
(
$date
), time() ) );
echo
'