今天改昨天测试出来的bug,代码如下
其中的一些方法参考这篇博文http://www.5ycode.com/291.html
$(function($){
$("#startDate").datepicker({
dateFormat:"yy-mm-dd",
changeMonth:true,
onClose:function(selectedDate) {
var endtime = $("#endDate").val();
alert(endtime);
if (endtime) {
endtime = new Date(endtime);//将此替换为 endtime=StringToDate(endtime);
alert(endtime);//在ie8模式下弹出NaN
if (selectedDate < endtime.format("YYYY-MM-dd", -180)) {
//两者的区间差大于半年
$("#startDate").attr("value", "");
showMessageWithoutReload("起始时间不能超过半年,请您重新选择开始日期");
}
}
$("#endDate").datepicker("option", "minDate", selectedDate);
}
});
})
在使用jquery ui的时候,使用它datepicker时候,因为业务的需要,要把时间区间控制在半年内,在ie9,google,firefox下都没问题,在ie8下测试有问题,断点发现,从页面取得时间值new Date()的时候ie8解析为NaN
![new Date()返回NaN jquery validate 校验yyyy-mm-dd格式日期 new Date()返回NaN jquery validate 校验yyyy-mm-dd格式日期](https://i-blog.csdnimg.cn/blog_migrate/11a29d992fa160f05fb8e399e5e5de9a.gif)
不仅如此,jquery validate也无法校验date
查了下,new Date('2013-10-17')的时候在ie8下生成了number类型的时间,找了个方法处理了下
/**字符转日期
*@param DateStr 日期格式的字符串
*/
StringToDate = function(DateStr) {
if (typeof DateStr == "undefined") return new Date();
if (typeof DateStr == "date") return DateStr;
var converted = Date.parse(DateStr);
var myDate = new Date(converted);
if (isNaN(myDate)) {
DateStr = DateStr.replace(/:/g, "-");//支持 2013:10:17
DateStr = DateStr.replace(" ", "-"); //支持 2013 10 17
DateStr = DateStr.replace(".", "-"); //支持 2013.10.17
var arys = DateStr.split("-"); //支持2013-10-17
switch (arys.length) {
case 7://2013-10-17-13-56-33-22 格式
myDate = new Date(arys[0], --arys[1], arys[2], arys[3], arys[4], arys[5], arys[6]);
break;
case 6: //2013-10-17-13-56-33 格式
myDate = new Date(arys[0], --arys[1], arys[2], arys[3], arys[4], arys[5]);
break;
default://2013-10-17 格式
myDate = new Date(arys[0], --arys[1], arys[2]);
break;
}
}
return myDate;
};
添加校验yyyy-mm-dd格式的方法
jQuery.validator.addMethod("isDate", function(value, element){
var ereg = /^(\d{1,4})(-|\/)(\d{1,2})(-|\/)(\d{1,2})$/;
var r = value.match(ereg);
if (r == null) {
return false;
}
var d = new Date(r[1], r[3] - 1, r[5]);
var result = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[5]);
return this.optional(element) || (result);
}, "请输入正确的日期");
验证: isDate:true
可以验证 2013-10-17和2013/10/17两种短横线和斜杠格式的日期