计算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 相关文章推荐
建站常用13种PHP开源CMS比较
Aug 23 PHP
php的一些小问题
Jul 03 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
PHP中使用SimpleXML检查XML文件结构实例
Jan 07 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
Smarty分页实现方法完整实例
May 11 PHP
php 常用的系统函数
Feb 07 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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
php2html php生成静态页函数
2008/12/08 PHP
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
前端性能优化及技巧
2016/05/06 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
RC4文件加密的python实现方法
2015/06/30 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
业务主管岗位职责范本
2013/12/25 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
优秀党员先进材料
2014/12/18 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android