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

5年以前  |  阅读数:248 次  |  编程语言:PHP 

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


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

<?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_year365+$how_leap_year366;

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."
\n";
$endday_from_startday=cal_start2end($end_day,$start_day);

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

?>




时间太少了,那位大虾可以修改为计算任意两日期之间的间隔最好!!!!!

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例