用日期控件,这个网上很多得,这个text.readonly = true,不可以吗

解决方案 »

  1.   

    function checkform(obj){
    var reg = /^(19|20)\d\d\-(0|1)\d\-(0|1|2|3)\d$/;
    if(!reg.test(obj.value)){
    alert("请输入正确的日期格式。");
    obj.focus();
    obj.select();
    }
    }
    如果还要检测输入的日期是否合法再加上下面这个函数的判断
    /* 
     * 检测日期中的月和日的正确性
     * 日期格式如:2004/05/04
     */
    function datecheck(val){
    var mydate = val.split("/");
    var year = mydate[0]%4;//取得是否为润年
    var month = mydate[1];//取得日期中的月份
    var day = mydate[2];//取得日期中的日
               if(month>12 || month == 0 || day == 0)  
               {return  false;}  
               if(month==4||month==6||month==9||month==11){  
                           if(day>30)  
                                       return  false;  
                           else  
                                       return  true;  
               }  
               else  if(month==2)  
               {  
                           if(year==0&&day>29)  //润月天数
                                       return  false;  
                           else  if(year!=0&&day>28)  
                                       return  false;  
                           else  
                                       return  true;  
               }  
               else{  
                           if(day>31)  
                                       return  false;  
                           else  
                                       return  true;  
               }  
    }
      

  2.   

    <script language=javascript>
    String.prototype.isDate = function()
    {
       var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
       if(r==null)return false; var d = new Date(r[1], r[3]-1, r[4]); 
       return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
    }
    </script><input type=text maxLength=10 size=20  name=news_date
      onblur="if(this.value!=''&&!this.value.isDate()){alert('wrong'); this.focus()}">
      

  3.   

    meizz(梅花雪) 的实现方式不错,另外还可以使用WebInput:http://www.evget.com/view/viewProductInfo.asp?productId=377
      

  4.   

    我既不是帅哥,也不是美女
     我只是一个coding的小妹
     function DTcheck(Txt){
       var st=Txt.value;
       var validDT=false;
       var stYear;
       var stMonth;
       var stDate;
       var intMonth;
     
       var reg1=/^\d{6}$/;
       var reg2=/^\d{8}$/;
       var reg3=/^\d{4}\/[0-9]{2}\/\d{2}$/;
       var reg4=/^\d{2}\/[0-9]{2}\/\d{2}$/;
     
       if (st=='') return; 
        
       if (reg1.test(st) || reg2.test(st) || reg3.test(st) || reg4.test(st)) {
          if (st.length==10) { // 'yyyy/mm/dd' Format
             stYear=st.substring(0,4);
             stMonth=st.substring(5,7);
             stDate=st.substring(8,10);
          }
                
          if (st.length==8) {
            if (st.substring(2,3)=='/'){  // 'yy/mm/dd' Format
              stYear="20"+st.substring(0,2);
              stMonth=st.substring(3,5);
              stDate=st.substring(6,8);
            }
            else { // 'yyyymmdd' 
              stYear=st.substring(0,4);
              stMonth=st.substring(4,6);
              stDate=st.substring(6,8);
            } 
          }  
          
          if (st.length==6) {
             stYear=st.substring(0,2);
             if (st.substring(0,2)>='90')  stYear='19'+st.substring(0,2);
             else     stYear='20'+st.substring(0,2);
             stMonth=st.substring(2,4);
             stDate=st.substring(4,6);
          }       //***加此段的原因是:parseInt("08") 或 09 返不回8或9.而1~7,10~12沒問題,只能先截去0後,用parseInt("8")返回8
          if (stMonth.substring(0,1)=='0')
             intMonth=parseInt(stMonth.substring(1,2));
          else
             intMonth=parseInt(stMonth);     
          //***      switch(intMonth) {
            case 1:
              if (stDate<='31')  validDT=true;
              break;
            case 2:
              if (parseInt(stYear) % 4 ==0) { //閏年
                 if (stDate<='29') validDT=true;      
              }
              else{
                 if (stDate<='28') validDT=true;
              }
              break;         
            case 3:
              if (stDate<='31')  validDT=true;
              break;
            case 4:
              if (stDate<='30')  validDT=true;
              break;
            case 5:
              if (stDate<='31')  validDT=true;
              break;
            case 6:
              if (stDate<='30')  validDT=true;
              break;            
            case 7:
              if (stDate<='31')  validDT=true;
              break;
            case 8:
              if (stDate<='31')  validDT=true;
              break;
            case 9:
              if (stDate<='30')  validDT=true;
              break;  
            case 10:
              if (stDate<='31')  validDT=true;
              break;
            case 11:
              if (stDate<='30')  validDT=true;
              break;
            case 12:
              if (stDate<='31')  validDT=true;
              break;
            default:    
              break;
          }   
          if (validDT==true){
             Txt.value=stYear + '/' + stMonth + "/" + stDate;
             return;
          }
          else{
             alert("錯誤的年月日輸入:["  + stYear + "年] [" + stMonth + "月] [" + stDate + "日]");
             Txt.focus();
             return;
          }               
        }   //match pattern
        else  //no match pattern
        {
           alert("錯誤的日期格式輸入\n正確格式:yyyymmdd 或 yymmdd 或 yyyy/mm/dd 或 yy/mm/dd \n含意:y:年份 m:月份 d:日");
           Txt.focus();
        } 
     } 
      

  5.   

    告诉你个简单的法子。将用户输入的日期以GMT格式赋给一个Date(),然后用这个Data()里面取得GMTString,比较返回的GMTString跟原来的是否一致就可以了。这样简单地解决了所有的问题,甚至什么4月31日,2月29日,闰年闰月问题统统消失。
      

  6.   

    <script language="javascript">
    <!--
    function isDate(str){
    var days= new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); 
    var a = str.match(/^(\d{0,4})(\/)(\d{2})(\/)(\d{2})$/);
    if (a == null) return false;
    days[1]=((0 == a[1] % 4) && (0 != (a[1] % 100))) || (0 == a[1] % 400) ? 29 : 28; 
    if (a[1]<=1900 || a[3]>=13 || a[5]>days[a[3]-1]) return false;
    return true;
    }
    alert(isDate("2003/12/20"))
    -->
    </script>
      

  7.   

    <script language="javascript">
    <!--
    function isDate(str){
    var days= new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); 
    var a = str.match(/^(\d{4})(\/)(\d{2})(\/)(\d{2})$/);
    if (a == null) return false;
    days[1]=((0 == a[1] % 4) && (0 != (a[1] % 100))) || (0 == a[1] % 400) ? 29 : 28; 
    if (a[1]<=1900 || a[3]==0 || a[3]>=13 || a[5]==0 || a[5]>days[a[3]-1]) return false;
    return true;
    }
    -->
    </script>
    <input type=text onblur="if(!isDate(this.value)){alert('日期格式错误(YYYY/MM/DD)');this.value='';this.focus();}">
      

  8.   

    var s="2004-2-29"
    var r;
    execScript("r=isDate(s)","VBScript");
    alert(r);
      

  9.   

    to: eglic(圪圪)(给偶妹妹找嫂子)
    强人!这个办法好!!!!
      

  10.   

    <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>