javascript日期格式及合法性验证

来源:互联网 发布:复合的sql语句怎么写 编辑:程序博客网 时间:2024/05/16 13:03

在一般的项目中,常常遇到日期格式的校验问题。在网上搜索了几下,没有找到比较好用的日期校验函数,特别是指定日期格式format(如mmddyyyy)时的校验,为此,花了一点时间,写就如下内容:

<html>
<head>

<script>
/**
 * 日期格式及合法性验证
 * @author yehailong
 * @param obj  需要验证的对象
 * @param fmt  日期格式字符串, 由yyymmdd(不区分大小写)组合而成,分隔符可以为'-'、'.'、'/'之一
 * @param name 对象显示名,便于提示,如不传此参数,不alert提示
 * @return boolean 通过返回true,否则false
 */
 function checkDate(obj,fmt,name){
 if(obj==null||obj=="undefined"||obj.disabled||obj.value==""){
  return true;
 }
 if(name==null){
  name="";
 }else{
  name="“"+name+"”";
 }
 var regex = new Array("-",".","/");
 var regex0 = "";
 for (var i=0;i<regex.length ;i++ ){
  if(fmt.indexOf(regex[i])!=-1){
   regex0 = regex[i];
   break;
  }
 }
 var y = 0;
 var m = 0;
 var d = 0;
 var yearIndex = 0;
 var monthIndex = 0;
 var dayIndex = 0;
 var number = new Array(0,0,0);
 var ch = '';
 var index = 0;
 for (var i=0;i<fmt.length ;i++ )
 {
  if(ch==''||fmt.charAt(i)==ch){
   number[index] = number[index]+1;
  }else if(fmt.charAt(i)!=regex0){
   index++;
   number[index] = number[index]+1;
  }
  ch = fmt.charAt(i);
  if(fmt.charAt(i)=='Y'||fmt.charAt(i)=='y'){
   if(y==0){
    yearIndex = i;
   }
   y++;
  }
  if(fmt.charAt(i)=='M'||fmt.charAt(i)=='m'){
   if(m==0){
    monthIndex = i;
   }
   m++;
  }
  if(fmt.charAt(i)=='D'||fmt.charAt(i)=='d'){
   if(d==0){
    dayIndex = i;
   }
   d++;
  }
 }
 var sreg = "";
 for(i in number){
  if(number[i]!=0){
   if(sreg!=""){
    sreg += regex0;
   }
   sreg += "//d{"+number[i]+"}";
  }
 }
 sreg = "^"+sreg+"$";
 var reg = new RegExp(sreg ,"i");
 if(!reg.test(obj.value)){
  alert(name+"格式应匹配'"+fmt+"'");
  setFocus(obj);
  return false;
 }
 
 //判断日期的合法性
 var dateStr = obj.value;
 var year = "";
 var month = "";
 var day = "";
 year = dateStr.substring(yearIndex,yearIndex+y);
 month = dateStr.substring(monthIndex,monthIndex+m);
 day = dateStr.substring(dayIndex,dayIndex+d);
 
 if(month.charAt(0)=='0'){
  month = month.charAt(1);
 }
 if(day=="")
  day = 1;
 var date = new Date(year,month-1,day);
 var newYear = date.getFullYear();
 var newMonth = date.getMonth()+1;
 if(newMonth<10) newMonth = "0"+newMonth;
 var newDay = date.getDate();
 if(newDay<10) newDay = "0"+newDay;
 
 var newDate = dateStr;
 function temp(src,start,end,tgt){
  var pre = "";
  if(start!=0){
   pre = src.substring(0,start);
  }
  var back = "";
  if((end+1)!=src.length){
   back = src.substring(end+1,src.length);
  }
 
  return pre+tgt+back;
 }
 
 if(y!=0){
  newDate = temp(newDate,yearIndex,yearIndex+y-1,newYear);
 }
 if(m!=0){
  newDate = temp(newDate,monthIndex,monthIndex+m-1,newMonth);
 }
 if(d!=0){
  newDate = temp(newDate,dayIndex,dayIndex+d-1,newDay);
 }
 if(dateStr!=newDate){
  if(confirm(name+"'"+dateStr+"'自动转换为'"+newDate+"'")){
   obj.value = newDate;
  }
 }
 return true;
}
 
function setFocus(obj){
 try{
  obj.focus();
  var rng = obj.createTextRange(); rng.collapse(false); rng.select();
 }catch(e){}
}
function hh(){
 var obj = document.getElementById('test');
 checkDate(obj,'mmddyyyy','出生日期')
}
</script>
日期:<input type="text" id="test" onblur="checkDate(this,'mmddyyyy','日期')">(mmddyyyy)

原创粉丝点击