计算2000年01月01日起到指定日的天数

  这是一个计算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>时间太少了,那位大虾可以修改为计算任意两日期之间的间隔最好!!!!!