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

这是一个计算2000年01月01日起到指定日的天数的函数

1<br/>

(算头也算尾)日期格式为:YYYY-MM-DD

1<br/>
  1   
  2// 计算从2000年01月01日开始到某日的天数   
  3  
  4function cal_start2end($end_day,$start_day)   
  5{   
  6  
  7  
  8$start_day=ereg_replace("-","",$start_day);   
  9$end_day=ereg_replace("-","",$end_day);   
 10  
 11  
 12  
 13if($end_day>=$start_day)   
 14{ // 截止日期大于开始日期   
 15if(substr($end_day,0,4)==substr($start_day,0,4))   
 16{   
 17  
 18if( is_int(substr($end_day,0,4)/4) )   
 19$leap_day=29; //leap year   
 20else   
 21$leap_day=28;   
 22  
 23  
 24// //同一年   
 25  
 26if(substr($end_day,4,2)==substr($start_day,4,2))   
 27{   
 28// the same month   
 29$endday_from_startday=$end_day-$start_day+1;   
 30  
 31}   
 32else   
 33{   
 34// not same month   
 35  
 36  
 37switch (substr($end_day,4,2))   
 38{   
 39case "01":   
 40$endday_from_newyear=substr($end_day,6,2)+1;   
 41break;   
 42case "02":   
 43$endday_from_newyear=substr($end_day,6,2)+31;   
 44break;   
 45case "03":   
 46$endday_from_newyear=substr($end_day,6,2)+$leap_day+31;   
 47break;   
 48case "04":   
 49$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2;   
 50break;   
 51case "05":   
 52$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30;   
 53break;   
 54case "06":   
 55$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30;   
 56break;   
 57case "07":   
 58$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30*2;   
 59break;   
 60case "08":   
 61$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30*2;   
 62break;   
 63case "09":   
 64$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*2;   
 65break;   
 66case "10":   
 67$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*3;   
 68break;   
 69case "11":   
 70$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*4;   
 71break;   
 72case "12":   
 73$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*5;   
 74break;   
 75}   
 76$endday_from_startday=$endday_from_newyear;   
 77}   
 78  
 79return ($endday_from_startday);   
 80  
 81}   
 82else   
 83{   
 84// 不同年!   
 85  
 86$differ_year=substr($end_day,0,4)-substr($start_day,0,4);   
 87  
 88$how_int_4_floor=floor($differ_year/4)+1; // 向下取整   
 89$how_int_4_ceil=ceil($differ_year/4)+1; // 向上取整   
 90  
 91  
 92  
 93if($how_int_4_floor==$how_int_4_ceil)   
 94$how_leap_year=$how_int_4_floor-1;   
 95else   
 96$how_leap_year=$how_int_4_floor;   
 97  
 98$how_noleap_year=$differ_year-$how_leap_year;   
 99  
100$differ_year2day=$how_noleap_year*365+$how_leap_year*366;   
101  
102  
103  
104if( is_int(substr($end_day,0,4)/4) )   
105$leap_day=29; //leap year   
106else   
107$leap_day=28;   
108  
109  
110  
111if(substr($end_day,4,2)==substr($start_day,4,2))   
112{   
113// the same month   
114$endday_from_startday=$differ_year2day+ substr($end_day,4,2);   
115  
116}   
117else   
118{   
119// not same month   
120  
121  
122switch (substr($end_day,4,2))   
123{   
124case "01":   
125$endday_from_newyear=substr($end_day,6,2)+1;   
126break;   
127case "02":   
128$endday_from_newyear=substr($end_day,6,2)+1+31;   
129break;   
130case "03":   
131$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31;   
132break;   
133case "04":   
134$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2;   
135break;   
136case "05":   
137$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30;   
138break;   
139case "06":   
140$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30;   
141break;   
142case "07":   
143$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*2+30*2;   
144break;   
145case "08":   
146$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*3+30*2;   
147break;   
148case "09":   
149$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*2;   
150break;   
151case "10":   
152$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*3;   
153break;   
154case "11":   
155$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*4;   
156break;   
157case "12":   
158$endday_from_newyear=substr($end_day,6,2)+1+$leap_day+31*5+30*5;   
159break;   
160} //End of switch   
161  
162  
163$endday_from_startday=$endday_from_newyear+$differ_year2day;   
164} //End of not same month   
165  
166  
167  
168return ($endday_from_startday);   
169  
170  
171} //End of year   
172} //End of $end_day>=$start_day   
173  
174  
175  
176} //End of function   
177  
178  
179$start_day="2000-01-01";   
180  
181$end_day="2011-01-01";   
182  
183echo "您输入的是:".$end_day."

``` \n"; $endday_from_startday=cal_start2end($end_day,$start_day);

echo "该日距离$start_day 共 ".$endday_from_startday." 天";


``` ```
``` ```
``` ```
``` 时间太少了,那位大虾可以修改为计算任意两日期之间的间隔最好!!!!!
Published At
Categories with Web编程
Tagged with
comments powered by Disqus