这是我以前写的,带有时和分的,自己改一下吧
在win2k  ie6下没什么大问题,其它浏览器下我没有测试过。
<html>
<head>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
function keydown(src){
var e=window.event;
var code=e.keyCode;
var cursorPos=getPos(src);
if(code==8){ //退格
if(cursorPos==5 || cursorPos==8|| cursorPos==11 || cursorPos==14){
movenext(src,cursorPos,-1);
cursorPos-=1;
}else movenext(src,cursorPos,0);
//alert();
var range=setSelect(src,cursorPos-1);
range.text="0";
movenext(src,cursorPos,-1);
e.returnValue=false;
//src.focus();
return false;
}else if(code==46)  e.returnValue=false;
}
function keypress(src){
var e=window.event;
var code=e.keyCode;
var cursorPos=getPos(src);
if(!keyPressInt()) return false;
if(cursorPos==4 || cursorPos==7|| cursorPos==10 || cursorPos==13){
movenext(src,cursorPos,1);
cursorPos += 1;
}
var num = String.fromCharCode(code);
//alert(num);
if(checkInput(src,num,cursorPos)){
var range=setSelect(src,cursorPos);
range.text=num;
if(cursorPos==3 || cursorPos==6|| cursorPos==9 || cursorPos==12)
movenext(src,cursorPos,2);
else movenext(src,cursorPos,1);
}
e.returnValue=false;
return false;
}
function checkInput(src,num,pos){
var val=src.value;
var year=parseInt(val.substring(0,4),10);
var month=parseInt(val.substring(5,7),10);
output.value+="num="+num+"   pos="+pos+"   val="+val + "   year="+year+"   month="+month;
output.value+="\r\n";
switch(pos){
case 0: if(num!=1 && num!=2) return false; break;
case 5: if(num>1) return false;break;
case 6: if(val.charAt(5)=="1" && num>2 || val.charAt(5)=="0" && num==0) 
return false;break;
case 8: switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
case 4: case 6: case 9: case 11:
if(num>3) return false;break;
case 2: if(num>2) return false;break;
}break;
case 9: var char8=val.charAt(8); switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(char8==0 && num==0 || char8==3 && num>1) return false;
case 4: case 6: case 9: case 11:
if(char8==0 && num==0 || char8==3 && num!=0) return false;
case 2: if(char8==0 && num==0) return false;
else if(char8==2 && !(year%4==0 && year %400==0) && num>8) return false;
}break;
case 11: if(num>2) return false;break;
case 12: if(parseInt(val.charAt(11)+num)>23) return false;break;
case 14: if(num>5) return false;break;
}
output.value+="return true;"; output.value+="\r\n";
return true;
}
function setSelect(src,pos){
var range = src.createTextRange();
range.moveStart('character',pos); 
range.moveEnd('character',pos-src.value.length+1); 
range.select();
return range;
}
function getPos(obj){
var ml=obj.value.length;
var pos=0;
var rng=document.selection.createRange();
rng.moveEnd("character",ml);
try{
pos=ml-rng.text.length
}catch(e){}
return pos;
}
function movenext(src,pos,flag)
{
var range =src.createTextRange();
range.moveStart("character",pos+flag);
range.collapse(true);
range.select();
}
function keyPressInt(){
var e=window.event;
code=e.keyCode;
if(code >=48 && code <=57)  return true;
else  {window.event.returnValue=false;return false;}
}
function checkPaste(){
window.event.returnValue=false;
}
function initDate(){
var date=new Date();
var year=date.getFullYear();
var month=date.getMonth()+1;
var day=date.getDate();
var hour=date.getHours();
var minu=date.getMinutes();
month=month<10?"0"+month:month;
day=day<10?"0"+day:day;
hour=hour<10?"0"+hour:hour;
minu=minu<10?"0"+minu:minu;
document.all.dateinput.value=year+"-"+month+"-"+day+" "+hour+":"+minu;
movenext(document.all.dateinput,0,0);
}</script>
</head><body onload="initDate()">
<p align=center>
<input name="dateinput" value="0000-00-00 00:00" onkeydown="keydown(this)" size="16" maxlength="16" type="text" onFocus="" onkeypress="keypress(this)" onpaste="checkPaste()" onDrag="checkPaste()" oncut="checkPaste()" onmousemove="checkPaste()">
</p>
<p><input type="button" value="clear" onclick="javascript:output.innerText='';">
<textarea id="output" width="800" height="600" rows="30" cols="100"></textarea>
</P>
<script language="JavaScript">
<!--
dateinput.focus();
//-->
</script>
</body>
</html>