<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'> +
<input type='text' id='txt02' name='txt02' size='20'> =
<input type='text' id='txt03' name='txt03' size='20'> ADD控制
<br><br>
<input type='text' id='txt04' name='txt01' size='20'> -
<input type='text' id='txt05' name='txt02' size='20'> =
<input type='text' id='txt06' name='txt02' size='20'> SUB控制
<br><br>
<input type='text' id='txt07' name='txt07' size='20'>
<input type='text' id='txt08' name='txt08' size='20'>
<input type='text' id='txt09' name='txt09' size='20'> MULUSE控制
<br><br>
<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>
上面的代碼經過本人的基本功能測試 還勉強可以對付下 呵呵