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


Posted in PHP onOctober 09, 2006

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

PHP 相关文章推荐
PHP读MYSQL中文乱码的解决方法
Dec 17 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
php重定向的三种方法分享
Feb 22 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
php验证码实现代码(3种)
Sep 07 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
PHP调用其他文件中的类
Apr 02 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
文件上传程序的全部源码
Oct 09 #PHP
一个简单计数器的源代码
Oct 09 #PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 #PHP
PHP脚本数据库功能详解(下)
Oct 09 #PHP
PHP脚本数据库功能详解(中)
Oct 09 #PHP
PHP脚本数据库功能详解(上)
Oct 09 #PHP
屏蔽浏览器缓存另类方法
Oct 09 #PHP
You might like
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
JS Timing
2007/04/21 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
js创建数组的简单方法
2016/07/27 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
Python MD5加密实例详解
2017/08/02 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
pandas分区间,算频率的实例
2019/07/04 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
机械专业求职信
2014/05/25 职场文书
2014年实习生工作总结
2014/11/27 职场文书
护林员个人总结
2015/03/04 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书