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

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

(0)

相关推荐

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

    这是一个计算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("-&qu

  • Java简单计算两个日期月数差的方法

    本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @return 如果d1>d2返回 月数差 否则返回0 */ public static int getMonthDiff(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInsta

  • 2013年国家法定节假日安排 春节假期2月9日至15日

    国务院办公厅关于2013年部分节假日安排的通知 国办发明电[2012]33号 各省.自治区.直辖市人民政府,国务院各部委.各直属机构: 根据国务院<关于修改<全国年节及纪念日放假办法>的决定>,为便于各地区.各部门及早合理安排节假日旅游.交通运输.生产经营等有关工作,经国务院批准,现将2013年元旦.春节.清明节.劳动节.端午节.中秋节和国庆节放假调休日期的具体安排通知如下. 一.元旦: 1月1日至3日放假调休,共3天.1月5日(星期六).1月6日(星期日)上班. 二.春节: 2月

  • Javascript实现通过选择周数显示开始日和结束日的实现代码

    最近在一个项目中遇到一个查询页面,其中一个查询条件是根据选择的年份.月以及周数显示选择的该周从几号到几号,这样一个需求.在网上搜索了一下,有类似的但是没有完全一样的,只好自己动手.思路是首先取得所选择的该年月1号这一天是星期几,然后算出这一周中周一的日期. 以此为基点,第1周的结束日即为这一天加6,第2周的开始日为这一天加7,结束日为这一天加13,以此类推,直到推算出第5周的开始日和结束日. 具体代码如下: //该方法有两个参数,date是给定的日期型参数,days是需要在该日期进行加减的天数.

  • C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法

    本文实例讲述了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法.分享给大家供大家参考.具体如下: 1.示例图 P(x1,y1)以点A(a,b)为圆心,旋转弧度为θ,求旋转后点Q(x2,y2)的坐标 2.实现方法 先将坐标平移,计算点(x1-a,y1-b)围绕原点旋转后的坐标,再将坐标轴平移到原状态 /// <summary> /// 结构:表示一个点 /// </summary> struct Point { //横.纵坐标 public double x, y; //构造

  • 批处理bat计算前N个月第一天的日期

    [方案一]BAT + date.exe(GNU) 复制代码 代码如下: @echo off rem 调用GNU for Win32的date.exe set "gnuDate=C:/test/date.exe" rem 指定月数 set MonthsAgo=1 for /f %%a in ('%gnuDate% -d "%MonthsAgo% months ago" "+%%Y-%%m-01"') do (     set "DstDa

  • 我和expression的日与被日 经典分析

    by jno 2007-11-29 http://www.ph4nt0m.org 当你第一次用expression方式来xss时,你肯定傻眼了,不停弹框,没法关闭浏览器,最终你只能祭出任务管理器将进程结束.也许你其他TAB页正有填到一半尚未提交的表单,你就这样被expression给日了,心里非常郁闷,于是就要想办法干它. 很多人第一反应就是cookie,没错这是个好办法: <div style="width: expression(if(document.cookie.indexOf('

  • Windows 2000的系统,防止木马写入指定目录

    从安全性上说2003比2000有大幅度的提高,但如果你还在用2000,请注意要保护一些目录,如 c:\winnt\system32\inetsrv\Data 这个目录默认有everyone写入的权限,黑客喜欢往这个目录写入木马. 如果防止这点? 可以设置FreeHost组对这个目录拒绝所有权限,它就无法写入了. 任何不想被写入的目录,都可以为freehost组件设置拒绝权限,提高安全性.

  • UTC时间、GMT时间、本地时间、Unix时间戳的具体使用

    目录 1.UTC时间 与 GMT时间 2.UTC时间 与 本地时 3.UTC 与 Unix时间戳 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时 UTC + 时区差 = 本地时间 时区差东为正,西为负.在此,把东八区时区差记为 +0800, UTC + (+0800) = 本地(北京)时间 (1) 那么,UTC = 本地时间(北京时间))- 0800 (2) 3.UTC 与 Uni

  • Python中的time模块和calendar模块

    目录 1.时间戳 2.时间元组 3.获取当前时间 4.格式化时间 5.格式化日期 6.获取CPU时间 7.日历模块 在Python中对时间和日期的处理方式有很多,其中转换日期是最常见的一个功能.Python中的时间间隔是以秒为单位的浮点小数. 1.时间戳 Python中基本都是以时间戳来保存当前时间的.时间戳单位最适于做日期运算.但是1970年之前的日期就无法以此表示了.太遥远的日期也不行,UNIX和Windows只支持到2038年. 时间戳是指格林威治时间1970年01月01日00时00分00

随机推荐