没有现成函数吧
---------------------------------------------------------------
(strtotime("2003-07-07")-strtotime("1800-12-28"))/86400
strtotime()函数得到当前日期的时间戳,相减后除以一天的秒数,得到相隔的天数
---------------------------------------------------------------
有,但无法计算到1800年
php的时间函数现在只能计算1970-01-01 到2038-01-19日之间的时间
以下是计算2038/01/19到1970/01/01之间相差的天数...
1
2echo (strtotime("19-01-2038")-strtotime("1970-01-01"))/86400;
---------------------------------------------------------------
http://www.phpe.net/faq/65.shtml
---------------------------------------------------------------
可以和数据库结合使用就很简单。
如:MySQL
使用 select TO_DAYS('2003-07-07')-TO_DAYS('1800-12-28') 就可以得出结果。
MS SQL
使用 select datediff(d ,'1800-12-28','2003-7-7')
---------------------------------------------------------------
---------------------------------------------------------------
验算:
$d1 = "2003-07-07";
$d2 = "1800-12-28";
if(strtotime($d2) < 0) {
$ar = split("[-/.]",$d2);
$dd = $ar[0];
$ar[0] = 1970;
$d2 = join("-",$ar);
}
$r = 0;
for($i=$dd;$i<1970;$i++)
$r+= ($i%4?0:1)-($i%100?0:1)+($i%400?0:1)+365;
echo $r + (strtotime($d1)-strtotime($d2))/86400;
结果为:73970
该算法最远可算至1752-9-14
---------------------------------------------------------------
31,2=>28,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31); $adate=explode("-",$my_date); $year=$adate[0]; $month=$adate[1]; $day=$adate[2]; $days=0; for($i=1;$i<$year;$i++){ if(($i%400==0) or ($i%4==0 and $i%100!=0)){ $days+=366; }else{ $days+=365; } // echo $i."year".$days." `````` "; check the year days } for($j=1;$j<$month;$j++){ if($j==2){ if(($j%400==0) or ($j%4==0 and $j%100!=0)){ $arr_month_day[2]+=1; } } $days+=$arr_month_day[$j]; // echo $j."month".$days." ```
``` "; check the month days } $days+=$day; return $days; } $a="2003-7-7"; $b="1800-12-28"; $dayofdiff=alldays($a)-alldays($b); echo "$a 与 $b 相差:$dayofdiff 天。"; ?> 随便用吧,可以不在受UNIX时间戳的限制了。 大家可以试一试。