分享PHP计算两个日期相差天数的代码
本文实例讲述了php计算两个日期相差天数的方法。分享给大家供大家参考。具体实现方法如下:
<?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("%dyears,%dmonths,%ddays\n",$years,$months,$days);
--------------------------------------------------------OR
$date1=newDateTime("2007-03-24");
$date2=newDateTime("2009-06-26");
$interval=$date1->diff($date2);
echo"difference".$interval->y."years,".$interval->m."months,".$interval->d."days";
//showsthetotalamountofdays(notdividedintoyears,monthsanddayslikeabove)
echo"difference".$interval->days."days";
--------------------------------------------------------OR
/**
*Calculatedifferencesbetweentwodateswithprecisesemantics.BasedonPHPsDateTime::diff()
*implementationbyDerickRethans.PortedtoPHPbyEmilH,2011-05-02.Norightsreserved.
*/
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;
}
/**
*Acceptstwounixtimestamps.
*/
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("YmdHis",$one))));
$b=array_combine($key,array_map("intval",explode("",date("YmdHis",$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-0419:37:22";
echo'<pre>';
print_r(_date_diff(strtotime($date),time()));
echo'</pre>';
?>
希望本文所述对大家学习php程序设计有所帮助。