用javascript實現input框日期時間格式化輸入
...
<script language="javascript" src="../public/datetime.js"></script>
<script language="javascript" type="text/javascript">
...
function submit()
{
...
if(isDate("starttime")==false){return false;}//提交時檢查時間是否輸入正確
...
}
</script>
...
時 間:<input name="datetime" type="text" onkeyDown="inputdatetime('starttime')" value="0000-00-00 00:00:00" size="20" maxlength="19" />
...
<script language="javascript" type="text/javascript">
document.all("datetime").value=changedatetime("datetime");//將時間格式化
</script>
日期時間格式化函式
datetime.js
function inputdatetime(objectname)
{
var oInput=document.all(objectname);
var range=document.all(objectname).createTextRange();//為元素建立一個 TextRange 物件。
var selrange = document.selection.createRange();//從當前文字選中區中建立 TextRange 物件
var startpos = 0,endpos = 0;
var oLeft;
var oRight;
var oLength;
var pos;
var cursorpos=0;//游標下一個相對位置
var cursorpos1=0;//游標結束位置
var keytext;
var curtext=range.text;//當前input框文字
var charbuff;//暫存字元
while(selrange.compareEndPoints("StartToStart",range)>0)//比較 TextRange 物件的結束點和其它範圍的結束點。
{
selrange.moveStart("character",-1);//更改範圍的開始位置。Moves one or more characters
startpos ++;
}
oLength=curtext.length;
if(startpos>18)//游標位置超出範圍
{
if(event.keyCode==8)//後退鍵特殊情況
{ oLeft=curtext.substring(0,startpos);oRight="0";
oInput.value=oLeft+oRight;
range.moveStart("character",19);
range.collapse(true);//將插入點移動到當前範圍的開始或結尾。
range.select();
} //將當前選中區置為當前物件。}
else if(event.keyCode==46||event.keyCode==39||event.keyCode==40)
{
range.moveStart("character",19);
range.collapse(true);
range.select();
}
else if(event.keyCode==37)//向前鍵
{
range.moveStart("character",19);
range.collapse(true);
range.select();
}
else if(event.keyCode==38)//向上鍵
{
range.moveStart("character",18);
range.collapse(true);
range.select();
}
else{
oInput.value = curtext.substring(0,18);
range.moveStart("character",18);
range.moveEnd("character",19);
range.collapse(true);
range.select(); //將當前選中區置為當前物件。
}
}
else if(event.keyCode>47&&event.keyCode<58)//按鍵是數字
{
if(startpos==0)
{oLeft="";oRight=curtext.substring(1,oLength);cursorpos=0;cursorpos1=1;}
else if(startpos==4||startpos==7)
{oLeft=curtext.substring(0,startpos)+"-";oRight=curtext.substring(startpos+2,oLength);cursorpos=1;cursorpos1=2;}
else if(startpos==10)
{oLeft=curtext.substring(0,startpos)+" ";oRight=curtext.substring(startpos+2,oLength);cursorpos=1;cursorpos1=2;}
else if(startpos==13||startpos==16)
{oLeft=curtext.substring(0,startpos)+":";oRight=curtext.substring(startpos+2,oLength);cursorpos=1;cursorpos1=2;}
else if(startpos>0&&startpos<19)
{oLeft=curtext.substring(0,startpos);oRight=curtext.substring(startpos+1,oLength);cursorpos=0;cursorpos1=1;}
oInput.value = oLeft+oRight;
range.moveStart("character",startpos+cursorpos);
range.moveEnd("character",startpos+cursorpos1);
range.collapse(true);
range.select();
}
else if(event.keyCode==8)//後退按鍵時,當前一個字元為"-"或" "或":"時不變,否則替換為"0"
{
if(startpos==0)
{oLeft="";oRight=curtext.substring(startpos,oLength);}
else if(startpos==14||startpos==17)
{oLeft=curtext.substring(0,startpos);oRight=":"+curtext.substring(startpos,oLength);}
else if(startpos==11)
{oLeft=curtext.substring(0,startpos);oRight=" "+curtext.substring(startpos,oLength);}
else if(startpos==5||startpos==8)
{oLeft=curtext.substring(0,startpos);oRight="-"+curtext.substring(startpos,oLength);}
else if(startpos==1||startpos==2||startpos==3||startpos==4||startpos==6||startpos==7||startpos==9||startpos==10||startpos==12||startpos==13||startpos==15||startpos==16||startpos==18)
{oLeft=curtext.substring(0,startpos);oRight="0"+curtext.substring(startpos,oLength);}
else
{oLeft=curtext.substring(0,startpos);oRight=curtext.substring(startpos-1,oLength);}
oInput.value = oLeft+oRight;
range.moveStart("character",startpos);
range.collapse(true);
range.select();
}
else if(event.keyCode==46)//delete按鍵,當後一個字元為"-"或" "或":"時不變,否則替換為"0"
{
if(startpos==0)
{oLeft="0";oRight=curtext.substring(startpos,oLength);}
else if(startpos==13||startpos==16)
{oLeft=curtext.substring(0,startpos)+":";oRight=curtext.substring(startpos,oLength);}
else if(startpos==10)
{oLeft=curtext.substring(0,startpos)+" ";oRight=curtext.substring(startpos,oLength);}
else if(startpos==4||startpos==7)
{oLeft=curtext.substring(0,startpos)+"-";oRight=curtext.substring(startpos,oLength);}
else if(startpos==1||startpos==2||startpos==3||startpos==5||startpos==6||startpos==8||startpos==9||startpos==11||startpos==12||startpos==14||startpos==15||startpos==17||startpos==18)
{oLeft=curtext.substring(0,startpos)+"0";oRight=curtext.substring(startpos,oLength);}
else
{oLeft=curtext.substring(0,startpos+1);oRight=curtext.substring(startpos,oLength);}
oInput.value = oLeft+oRight;
range.moveStart("character",startpos+1);
range.collapse(true);
range.select();
}
else if(event.keyCode==38)//向上鍵
{
range.moveStart("character",startpos-1);
range.collapse(true);
range.select();
}
else if(event.keyCode==40)//向下鍵
{
range.moveStart("character",startpos+1);
range.collapse(true);
range.select();
}
else //其他按鍵不做反應
{
oLeft=curtext.substring(0,startpos);
oRight=curtext.substring(startpos,oLength);
oInput.value = oLeft+oRight;
range.moveStart("character",startpos);
range.collapse(true);
range.select();
}
}
function changedatetime(objectname)//將日期格式規範化成 yyyy-mm-dd hh-mm-ss
{
var textbuff;
var year,month,day,minute,hour,second;
var curtext=document.all(objectname).value;
year=curtext.substring(0,curtext.indexOf("-"));
curtext=curtext.substring(curtext.indexOf("-")+1,curtext.length)
month=curtext.substring(0,curtext.indexOf("-"));
if(month.length<2){month="0"+month;}
curtext=curtext.substring(curtext.indexOf("-")+1,curtext.length)
day=curtext.substring(0,curtext.indexOf(" "));
if(day.length<2){day="0"+day;}
curtext=curtext.substring(curtext.indexOf(" ")+1,curtext.length)
hour=curtext.substring(0,curtext.indexOf(":"));
if(hour.length<2){hour="0"+hour;}
curtext=curtext.substring(curtext.indexOf(":")+1,curtext.length)
minute=curtext.substring(0,curtext.indexOf(":"));
if(minute.length<2){minute="0"+minute;}
curtext=curtext.substring(curtext.indexOf(":")+1,curtext.length)
second=curtext.substring(0,curtext.length);
if(second.length<2){second="0"+second;}
return ( year+"-"+month+"-"+day+" "+minute+":"+hour+":"+second)
}
function isDate(checktext)//日期時間檢查
{
var datetime;
var year,month,day,hour,munite,second;
var gone,gtwo,gthree,gfour,gfive;
datetime=document.all(checktext).value;
year=datetime.substring(0,4);
gone=datetime.substring(4,5);
month=datetime.substring(5,7);
gtwo=datetime.substring(7,8);
day=datetime.substring(8,10);
gthree=datetime.substring(10,11);
hour=datetime.substring(11,13);
gfour=datetime.substring(13,14);
munite=datetime.substring(14,16);
gfive=datetime.substring(16,17);
second=datetime.substring(17,19);
if((gone=="-")&&(gtwo=="-")&&(gthree==" ")&&(gfour==":")&&(gfive==":"))
{
if(month<1||month>12){alert("月份必須在01和12之間!");return false;}
if(day<1||day>31){alert("日期必須在01和31之間!");return false;}
else{
if(month==2)
{
if((year%4)==0&&day>29){alert("二月份日期必須在01到29之間!");return false;}
if((year%4)>0&&day>28){alert("二月份日期必須在01到28之間!");return false;}
}
if((month==4||month==6||month==9||month==11)&&(day>30)){alert(" 在四,六,九,十一月份 /n日期必須在01到30之間!");return false;}
}
if(hour>23){alert("小時必須在00和24之間!");return false;}
if(munite>59){alert("分鐘必須在00和60之間!");return false;}
if(second>59){alert("秒必須在00和60之間!");return false;}
}
else
{
alert("請輸入日期!格式為(yyyy-mm-dd hh-mm-ss) /n例(2001-01-01 01:00:00)");
return false;
}
return true;
}