new Date()返回NaN jquery validate 校验yyyy-mm-dd格式日期

2013/10/17 4565点热度 0人点赞 0条评论

今天改昨天测试出来的bug,代码如下

其中的一些方法参考这篇博文https://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

不仅如此,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两种短横线和斜杠格式的日期

yxkong

这个人很懒,什么都没留下

文章评论