<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yunye 的 JavaBlog

    @see codemouse

    統計

    留言簿(1)

    閱讀排行榜

    評論排行榜

    [原][javascript]通過時間和時間間隔算日期----小小的原創

    <html>
    <head>
    <script language='javascript'>

    ///////////////////////////////基礎小處理函數

    function cekleap(input)//判斷閏年
    {
    if(typeof(input)=="string")
    {var y=input.substring(0,4);}
    else
    {var y=input}
    if(y%4!=0)
    {return false;}
    else
    {
    ??? if((y%100!=0)||(y%400==0)){return true;}
    ??? else{return false;}
    }
    }

    function calMMDD(indays,leap)//知道天數算日期且indays<=(365or366);leap為真為閏年,為假為平年
    {
    var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);

    var inN=indays;
    var inL=leap;

    switch(inL)
    {
    case true:{var aa=a2;break;}
    case false:{var aa=a1;break;}
    default:{break;}
    }

    var outO=new Object();

    for(var i=0;i<12;i++)
    {
    ??? if(inN<=aa[i])
    ??? {
    ??? outO.mm=i+1;
    ??? outO.dd=inN;
    ??? break;
    ??? }
    ??? else
    ??? {inN-=aa[i];}
    }
    return(outO);
    }

    function convertion(yy,mm,dd)//整理輸出
    {
    switch(mm<10)
    {
    case true:{mm="0"+mm;break;}
    default:{break;}
    }
    switch(dd<10)
    {
    ??? case true:{dd="0"+dd;break;}
    ??? default:{break;}
    }
    var outS=yy+"-"+mm+"-"+dd;//格式可更改
    return(outS);
    }

    ///////////////////////////////算以后的日期

    function addday(inputS,inputN)???? //inputS 的格式 yyyy-mm-dd??
    {
    // alert("l12");
    var outS="";

    var dis=inputN-0;//先處理下 轉成數字
    var yy=inputS.substring(0,4)-0;
    var mm=inputS.substring(5,7)-0;
    var dd=inputS.substring(8,10)-0;
    //alert(yy);
    //alert(mm);
    //alert(dd);

    var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);

    if(!cekleap(yy))
    {
    ??? var aa=a1;
    }
    else
    {
    ??? var aa=a2;
    }

    var tt=aa[mm-1]-dd; //本月剩下的天數
    //alert(aa[mm-1]);??

    if(dis<=tt)???? //先處理本月
    ???? {
    ????? dd+=dis;
    ????? outS=convertion(yy,mm,dd);
    ????? return(outS);
    ???? }
    else
    ???? {
    ????? mm+=1;?????
    ????? dis-=tt;
    ???? }

    if(mm==13)//是否跨年
    {
    yy+=1;
    mm=1;
    if(!cekleap(yy))
    {
    ??? aa=a1;
    }
    else
    {
    ??? aa=a2;
    }
    }

    for(var i=(mm-1);i<=11;i++)???? //接著后面處理
    {
    ??? switch (i)
    ???? {
    ????? case 11:??????? //判斷是否為12月
    ?????? {
    //????? alert("laa");
    ??????? if(dis<=aa[i])
    ???????? {
    outS=convertion(yy,(i+1),dis);
    return(outS);
    ???????? }
    ??????? else
    ???????? {
    ????????? dis-=aa[i];
    yy+=1;
    if(!cekleap(yy))
    ??? {
    ???? aa=a1;
    ??? }
    ??? else
    ??? {
    ???? aa=a2;
    ??? }
    i=-1; //跨年
    ???????? }
    break;
    ?????? }
    ????? default:
    ?????? {
    //?????? alert("l7");
    ??????? if(dis<=aa[i])
    ??????? {
    outS=outS=convertion(yy,(i+1),dis);
    // alert(outS);
    return(outS);
    ??????? }
    ??????? else
    ??????? {
    ???????? dis-=aa[i];???????
    ??????? }
    break;
    ?????? }
    ???? }
    }
    //alert("l10");
    }


    ///////////////////////////////算以前的日期

    function subtractday(inputS,inputN)???? //inputS 的格式 yyyy-mm-dd??
    {
    var outS="";

    var dis=inputN-0;
    var yy=inputS.substring(0,4)-0;
    var mm=inputS.substring(5,7)-0;
    var dd=inputS.substring(8,10)-0;

    var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);

    if(!cekleap(yy))
    {
    ??? var aa=a1;
    }
    else
    {
    ??? var aa=a2;
    }

    if(dis<dd)???? //先處理本月
    ???? {????
    ????? outS=convertion(yy,mm,(dd-dis));
    ????? return(outS);
    ???? }
    else
    ???? {mm-=1;?????
    ????? dis-=dd;}


    if(mm==0)//看是否跨年
    {
    yy-=1;
    mm=12;
    if(!cekleap(yy))
    {
    ??? aa=a1;
    }
    else
    {
    ??? aa=a2;
    }
    }

    for(var i=(mm-1);i>=0;i--)???? //接著后面處理
    {
    ??? switch (i)
    ???? {
    ????? case 0:??????? //判斷是否為1月
    ?????? {
    ??????? if(dis<aa[i])
    ???????? {
    outS=convertion(yy,(i+1),(aa[i]-dis));
    return(outS);
    ???????? }
    ??????? else
    ???????? {
    ????????? dis-=aa[i];
    yy-=1;
    if(!cekleap(yy))
    ??? {
    ???? aa=a1;
    ??? }
    ??? else
    ??? {
    ???? aa=a2;
    ??? }
    i=12; //跨年
    ???????? }
    break;
    ?????? }
    ????? default:
    ?????? {
    ??????? if(dis<aa[i])
    ??????? {
    outS=convertion(yy,(i+1),(aa[i]-dis));
    return(outS);
    ??????? }
    ??????? else
    ??????? {
    ???????? dis-=aa[i];???????
    ??????? }
    break;
    ?????? }
    ???? }
    }
    }

    ////////////////////////////////////間隔輸入可正可負

    function multiuseday(inputS,inputN) //inputS的格式 yyyy-mm-dd??? inputN為天數(可正可負) 估算結果時間不能早于1970.01.01或者超過2100年
    {
    var outS;
    var indate=new Date(inputS.substring(0,4),(inputS.substring(5,7)-1),inputS.substring(8,10)); //起點時間
    var Stime=new Date(1970,00,01);//標準時間??? //注意:用 new Date 月份是從0開始的
    var Tdis=indate-Stime+24*60*60*1000;//因為從1號開始 所以要加一天
    var oneday=24*60*60*1000;

    //alert("x1");
    //alert(Tdis/oneday);

    //alert("xX1");
    //alert(indate/oneday);

    var dis=(inputN-0)*24*60*60*1000;//換成毫秒

    //alert("x11");
    //alert(dis/oneday);

    if(dis==0){return(inputS);}

    dis=(Tdis+dis)/oneday;

    //alert("x111");
    //alert(dis);

    var normalyear=365;
    var leapyear=366;

    var Ydis=0;//年間隔
    var Ddis=0;//天間隔
    var mmdd=new Object();//月份日號對象


    if(dis<=normalyear)//1970年
    {
    ??? Ddis+=dis;
    ??? mmdd=calMMDD(Ddis,false);
    ??? outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
    ??? return(outS);
    }

    if(dis<=(normalyear*2))//1971年
    {
    ??? Ydis=1;
    ??? Ddis+=(dis-365);
    ??? mmdd=calMMDD(Ddis,false);
    ??? outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
    ??? return(outS);
    }

    //alert("x1111");
    //alert(Ddis);

    dis-=(normalyear*2);

    //alert("bbb1");
    //alert(dis);

    //4年周期處理 從1972閏年開始

    Ydis=Math.floor(dis/(leapyear+normalyear*3));//注意處理小數部分

    Ydis=2+Ydis*4;//年的間隔

    Ddis=Ddis+dis%(leapyear+normalyear*3); //落在一個周期內的天數

    //alert("x11111");
    //alert(Ddis);
    if(Ddis==0)//正好落在周期的最后1天 特殊處理
    {Ydis-=4;Ddis=1461;}


    if(Ddis<=731)??? //做周期內判斷 1閏3平
    {
    ??? if(Ddis<=366)
    ??? {
    ???? mmdd=calMMDD(Ddis,true);
    ??? }
    ??? else
    ??? {
    ???? Ydis+=1;
    ???? Ddis-=366;
    ???? mmdd=calMMDD(Ddis,false);
    ??? }
    }
    else
    {
    ??? if(Ddis<=1096)
    ???? {
    ????? Ydis+=2;
    ????? Ddis-=731;
    ????? mmdd=calMMDD(Ddis,false);
    ???? }
    ??? else
    ???? {
    ????? Ydis+=3;
    ????? Ddis-=1096;
    ????? mmdd=calMMDD(Ddis,false);
    ???? }
    }
    outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
    return(outS);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    function clka()
    {
    var mes=cekleap("2008");
    alert(mes);
    }

    function add()
    {
    var obj01=document.getElementById("txt01");
    var obj02=document.getElementById("txt02");
    var obj03=document.getElementById("txt03");
    obj03.value=addday(obj01.value,obj02.value);
    }

    function subtract()
    {
    var obj04=document.getElementById("txt04");
    var obj05=document.getElementById("txt05");
    var obj06=document.getElementById("txt06");
    obj06.value=subtractday(obj04.value,obj05.value);
    }

    function multiuse()
    {
    var obj07=document.getElementById("txt07");
    var obj08=document.getElementById("txt08");
    var obj09=document.getElementById("txt09");
    obj09.value=multiuseday(obj07.value,obj08.value);
    }
    </script>

    </head>
    <body>
    <input type='text' id='txt01' name='txt01' size='20'>&nbsp;+
    <input type='text' id='txt02' name='txt02' size='20'>&nbsp;=
    <input type='text' id='txt03' name='txt03' size='20'>&nbsp;ADD控制
    <br><br>
    <input type='text' id='txt04' name='txt01' size='20'>&nbsp;-
    <input type='text' id='txt05' name='txt02' size='20'>&nbsp;=
    <input type='text' id='txt06' name='txt02' size='20'>&nbsp;SUB控制
    <br><br>
    <input type='text' id='txt07' name='txt07' size='20'>&nbsp;
    <input type='text' id='txt08' name='txt08' size='20'>&nbsp;
    <input type='text' id='txt09' name='txt09' size='20'>&nbsp;MULUSE控制
    <br><br>
    &nbsp;&nbsp;&nbsp;
    <input type='button' id='btn01' name='btn01' value='檢??? 測' >
    <input type='button' id='btn02' name='btn02' value='L E A P' onClick='clka();'>
    <input type='button' id='btn03' name='btn03' value='A D D' onClick='add();'>
    <input type='button' id='btn04' name='btn04' value='S U B' onClick='subtract();'>
    <input type='button' id='btn05' name='btn05' value='M U L' onClick='multiuse();'>
    </body>
    </html>

    上面的代碼經過本人的基本功能測試 還勉強可以對付下 呵呵

    posted on 2008-08-30 03:23 yunye 閱讀(577) 評論(0)  編輯  收藏 所屬分類: javascript

    主站蜘蛛池模板: 久久青草免费91线频观看不卡| 国产黄色片免费看| 99国产精品视频免费观看| 国产偷国产偷亚洲清高动态图| 羞羞漫画在线成人漫画阅读免费 | 亚洲国产精品无码久久一线| 男女猛烈无遮掩视频免费软件| 又爽又高潮的BB视频免费看| 亚洲AV无码一区二区三区性色 | 国产一级淫片免费播放| 久久精品国产亚洲av品善 | 亚洲七七久久精品中文国产| 美女隐私免费视频看| 亚洲人成人无码网www国产| 亚洲第一视频在线观看免费| 亚洲日韩小电影在线观看| 精品无码人妻一区二区免费蜜桃| 亚洲午夜免费视频| 91精品视频免费| 亚洲成a∧人片在线观看无码| 免费国产高清视频| 怡红院免费的全部视频| 久久亚洲精品国产精品| 成视频年人黄网站免费视频| 亚洲AV永久无码天堂影院| 亚洲人成人网站在线观看| 久9热免费精品视频在线观看| 亚洲av无码片在线观看| 四虎在线播放免费永久视频| 一级毛片免费视频网站| 亚洲精品成人av在线| 最新猫咪www免费人成| 四虎永久在线精品免费一区二区| 亚洲Av无码精品色午夜| 最近中文字幕无吗免费高清| 免费国产在线精品一区| 亚洲精品在线免费观看| 全部免费毛片在线| 91精品国产免费久久国语蜜臀 | A国产一区二区免费入口| 亚洲美女免费视频|