| 
| 技术资料  > PHP技术 > 入门教程 : 计算2000年01月01日起到指定日的天数 |  
计算2000年01月01日起到指定日的天数 March 25,2004 |  
这是一个计算2000年01月01日起到指定日的天数的函数  
<br>  
(算头也算尾)日期格式为:YYYY-MM-DD  
<br>  
 
<?php  
//    计算从2000年01月01日开始到某日的天数  
 
function cal_start2end($end_day,$start_day)  
{  
 
 
$start_day=ereg_replace("-","",$start_day);  
$end_day=ereg_replace("-","",$end_day);  
 
 
 
if($end_day>=$start_day)  
{    //    截止日期大于开始日期  
    if(substr($end_day,0,4)==substr($start_day,0,4))  
        {  
 
if( is_int(substr($end_day,0,4)/4) )  
    $leap_day=29;    //leap year  
else  
    $leap_day=28;  
 
 
//            //同一年  
 
        if(substr($end_day,4,2)==substr($start_day,4,2))  
            {  
//            the same month   
            $endday_from_startday=$end_day-$start_day+1;  
 
            }  
        else  
            {  
//             not same month  
 
 
            switch (substr($end_day,4,2))  
                {  
                case "01":  
                        $endday_from_newyear=substr($end_day,6,2)+1;  
                        break;  
                case "02":  
                        $endday_from_newyear=substr($end_day,6,2)+31;  
                        break;  
                case "03":  
                        $endday_from_newyear=substr($end_day,6,2)+$leap_day+31;  
                        break;  
                case "04":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2;  
                        break;  
                case "05":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30;  
                        break;  
                case "06":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30;  
                        break;  
                case "07":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30*2;  
                        break;  
                case "08":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30*2;  
                        break;  
                case "09":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*2;  
                        break;  
                case "10":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*3;  
                        break;  
                case "11":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*4;  
                        break;  
                case "12":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*5;  
                        break;  
                }  
            $endday_from_startday=$endday_from_newyear;  
            }  
 
return ($endday_from_startday);  
 
        }  
    else  
        {  
//        不同年!  
 
$differ_year=substr($end_day,0,4)-substr($start_day,0,4);  
 
$how_int_4_floor=floor($differ_year/4)+1; // 向下取整  
$how_int_4_ceil=ceil($differ_year/4)+1; // 向上取整  
 
 
 
if($how_int_4_floor==$how_int_4_ceil)  
    $how_leap_year=$how_int_4_floor-1;  
else  
    $how_leap_year=$how_int_4_floor;  
 
$how_noleap_year=$differ_year-$how_leap_year;  
 
$differ_year2day=$how_noleap_year*365+$how_leap_year*366;  
 
 
 
if( is_int(substr($end_day,0,4)/4) )  
    $leap_day=29;    //leap year  
else  
    $leap_day=28;  
 
 
 
        if(substr($end_day,4,2)==substr($start_day,4,2))  
            {  
//            the same month   
            $endday_from_startday=$differ_year2day+ substr($end_day,4,2);  
 
            }  
        else  
            {  
//             not same month  
 
 
            switch (substr($end_day,4,2))  
                {  
                case "01":  
                        $endday_from_newyear=substr($end_day,6,2)+1;  
                        break;  
                case "02":  
                        $endday_from_newyear=substr($end_day,6,2)+1+31;  
                        break;  
                case "03":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31;  
                        break;  
                case "04":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2;  
                        break;  
                case "05":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30;  
                        break;  
                case "06":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30;  
                        break;  
                case "07":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30*2;  
                        break;  
                case "08":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30*2;  
                        break;  
                case "09":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*2;  
                        break;  
                case "10":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*3;  
                        break;  
                case "11":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*4;  
                        break;  
                case "12":  
                        $endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*5;  
                        break;  
                } //End of switch  
 
 
    $endday_from_startday=$endday_from_newyear+$differ_year2day;  
    }    //End of  not same month   
 
 
 
return ($endday_from_startday);  
 
 
        } //End of year  
}        //End of  $end_day>=$start_day  
 
 
 
} //End of function  
 
 
$start_day="2000-01-01";  
 
$end_day="2011-01-01";  
 
echo "您输入的是:".$end_day."<br>n";  
$endday_from_startday=cal_start2end($end_day,$start_day);  
 
echo "该日距离$start_day 共 ".$endday_from_startday." 天";  
 
?>  
<br><br><br><br>时间太少了,那位大虾可以修改为计算任意两日期之间的间隔最好!!!!!  
         |  
 
 |