阿杰 发表于 2011-6-15 08:39:06

Javascript校验日期合法性和必录性

编写代码的时候经常遇到的就是日期的校验问题,方法很多,但是找到一个比较准确的却成了程序员们比较头疼的。自己总结了一小段校验日期并且校验必录的代码分享给大家。
具体校验日期合法性和必录性:
<script type="text/javascript" language="text/javascript">
function submit_button(){
if(!document.all.timestart.value){
alert("开始办理业务时间不能为空!");
document.all.timestart.focus();
return;
}
if(!document.all.timeend.value){
alert("结束办理业务时间不能为空!");
document.all.timeend.focus();
return;
}
if (!isDate(document.all.timestart.value)){
      alert("请输入正确的日期格式!例如:2000-01-01!");
      document.all.timestart.focus();
      return false;
    }
    if (!isDate(document.all.timeend.value)){
      alert("请输入正确的日期格式!例如:2000-01-01!");
      document.all.timeend.focus();
      return false;
    }
}
function isDate(str){
      //---   一般输入性判断
      var Strs = str.split("-");
      if(Strs.length!=3){return 0;};
      var AYear=Strs,AMonth=Strs,ADay=Strs;
      if   ((AYear.length!=4)||(AMonth.length!=2)||(ADay.length!=2)){return 0;}
      if   (!/^(\d)+$/.test(AYear)||!/^(\d)+$/.test(AMonth)||!/^(\d)+$/.test(ADay)){return 0;}
      var   tempYear,tempMonth,tempDay;
      //---   非闰年的每个月天数
      var   constMonth   =   new   Array(31,28,31,30,31,30,31,31,30,31,30,31);   
      tempYear =   parseInt(AYear);
      if((tempYear>2100)||(tempYear<1900)){return 0;}   
      tempMonth = parseInt((AMonth.substring(0,1)=="0")?AMonth.substring(1,2):AMonth);
      tempDay = parseInt((ADay.substring(0,1)=="0")?ADay.substring(1,2):ADay);
      //---   判断月合法性
      if   ((tempMonth==0)||(tempMonth>12)){return 0;}
      if   (tempMonth != 2){
            if((tempDay > constMonth) || (tempDay ==0)){return 0;}
      }else{   //---   根据闰年判断
            if((tempYear%4==0)&&(tempYear0!=0)||(tempYear@0==0)){
                if((tempDay>29)||(tempDay==0)){return 0;}
            }else{
                if((tempDay>constMonth)||(tempDay==0)){return0;}
            }   
      }
      return   1
    }
</script>

upring 发表于 2015-5-16 13:14:25

今天任务完成 嘿嘿
页: [1]
查看完整版本: Javascript校验日期合法性和必录性