var nowDate = new Date(); /*** * 验证某个表单的日期是否有效 * @param {} obj * @param {} maxDate 如果maxDate=ture日期不能输入大于今天的 */ function validateDate(obj,maxDate) { if (obj.value) { var val = nowDate.validate(obj.value,maxDate); if (val) { obj.value = val; return true; } else { obj.value = ""; obj.focus(); } } return false; } /** * 日期格式化处理 * * @param {} * format * @return {} * @author Wuhao crated the method at 2010-9-10 */ Date.prototype.format = function(format) { var o = { "M+" : this.getMonth() + 1, "d+" : this.getDate(), "h+" : this.getHours(), "m+" : this.getMinutes(), "s+" : this.getSeconds(), "q+" : Math.floor((this.getMonth() + 3) / 3), "S" : this.getMilliseconds() } if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return format; } /** * 日期比较 * * @param {} * minDate * @param {} * maxDate * @return {Boolean} */ Date.prototype.compare = function(minDate, maxDate) { var min = minDate.split("-"); var max = maxDate.split("-"); //月份补零 if(min[1].toString().length==1){ min[1]="0"+min[1]; } //日期补零 if(min[2].toString().length==1){ min[2]="0"+min[2]; } //月份补零 if(max[1].toString().length==1){ max[1]="0"+max[1]; } //日期补零 if(max[2].toString().length==1){ max[2]="0"+max[2]; } min=parseInt(min.join("")); max=parseInt(max.join("")); if(min>max){ return false; }else{ return true; } } /** * 将字符转成日期 * * @param {} * minDate * @param {} * maxDate */ Date.prototype.toDate = function(date) { } /** * 重写日期验证函数 * * @param {} * date * @return {} */ Date.prototype.validate = function(date, maxDate) { var regx_date = /^\d{4}-\d{2}-\d{2}$/; var reg_yyyymmdd = /^\d{4}\d{2}\d{2}$/; var reg_mmdd = /^\d{2}\d{2}$/; var reg_dd = /^\d{1,2}$/; var reg_ddD = /^\-?\d{1,2}$/; var reg_ddA = /^\+?\d{1,2}$/; var dt = new Array(3); var toDay=new Date(); // 匹配2010-05-09格式 if (regx_date.test(date)) { dt = date.split("-"); // 匹配20100908格式 } else if (reg_yyyymmdd.test(date)) { dt[0] = date.substring(0, 4); dt[1] = date.substring(4, 6); dt[2] = date.substring(6, 8); // 匹配0708格式 } else if (reg_mmdd.test(date)) { dt[0] = toDay.getYear(); dt[1] = date.substring(0, 2); dt[2] = date.substring(2, 4); // 匹配08格式 } else if (reg_dd.test(date)) { dt[0] = toDay.getYear(); dt[1] = toDay.getMonth() + 1; dt[2] = date.substring(0, 2); // 匹配-08格式 } else if (reg_ddD.test(date)) { dt[0] = toDay.getYear(); dt[1] = toDay.getMonth(); dt[2] = date.substring(1, 3); // 匹配+08格式 } else if (reg_ddA.test(date)) { dt[0] = toDay.getYear(); dt[1] = toDay.getMonth() + 2; dt[2] = date.substring(1, 3); } else { alert("您输入的格式不正确,合法的格式如:2010-08-09、20100809、0809、09、+09、-09。"); return null; } //月份补零 if(dt[1].toString().length==1){ dt[1]="0"+dt[1]; } //日期补零 if(dt[2].toString().length==1){ dt[2]="0"+dt[2]; } if (_checkDateValue(dt)) { var vDate=dt.join("-") //是不是今天 if(maxDate==true){ maxDate=toDay.getYear()+"-"+(toDay.getMonth()+1)+"-"+toDay.getDate(); //指定最大日期 }else if(maxDate){ }else{ return vDate; } if(this.compare(vDate,maxDate)){ return vDate; }else{ alert("输入日期"+vDate+"不合法,不能大于"+maxDate); return null; } } else { return null; } } /** * 验证日期的有效性 * * @param {} * md * @return {Boolean} */ function _checkDateValue(md) { var days = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (parseFloat(md[0]) < 1900 || parseFloat(md[0]) > 2010) { alert("年份不正确,年份只能在1900~2010之间."); return false; } if (parseFloat(md[1]) < 1 || parseFloat(md[1]) > 12) { alert("月份不正确,月份只能在1~12之间."); return false; } if (parseFloat(md[2]) < 1 || parseFloat(md[2]) > 31) { alert("日期不正确,日期只能在1~31之间."); return false; } if (parseFloat(md[1]) == 2) { if (md[0] % 4 == 0 && parseFloat(md[2]) > 29) { alert(md.join("-") + "日期不正确,闰月只能在1~29之间."); return false; } else if (md[0] % 4 > 0 && parseFloat(md[2]) > 28) { alert(md.join("-") + "日期不正确,平月只能在1~28之间."); return false; } } else { if (parseFloat(md[2]) > days[parseFloat(md[1])]) { alert(parseFloat(md[1]) + "月的日期只能在1~" + days[parseFloat(md[1])] + "之间."); return false; } } return true; }