JS求当前日期后N天。IE环境下出现NaN


目前的写法


 function setTime(duration){
        var bTime = $('#startTime').val();
        if(bTime==''){
            alert('请输入开始时间');
            return;
        }else{
              var later = new Date(bTime);
              later.setDate(later.getDate()+parseInt(duration));
              return later.Format("yyyy-MM-dd hh:mm:ss"); 
        }
    }

该方法在IE下出现NaN,搜索未果。望老手帮助。

jquery JavaScript internet-explorer

诹访佩安诺 10 years, 3 months ago

我也折腾了一下,查了资料说,Date.parse()方法不能兼容所有浏览器的。
参考了Dont的答案,稍稍做下改进吧。


 function setTime(duration){
        var bTime = $('#startTime').val();
        if(bTime==''){
            alert('请输入开始时间');
            return;
        }else{
             var array = bTime.match(/\d+/g);  
             bTime = array[0]+'/'+array[1]+'/'+array[2];
             var later = new Date(bTime);
             later.setHours(parseInt(array[3]), parseInt(array[4]));
             later.setDate(later.getDate()+parseInt(duration));
             // 这个Format方法哪里来的?
             return later.Format("yyyy-MM-dd hh:mm:ss"); 
        }
    }

八雲家的貘 answered 10 years, 3 months ago


 js new Date()参数形式:
        new Date("month dd,yyyy hh:mm:ss");
        new Date("month dd,yyyy");
        new Date(yyyy, mth, dd, hh, mm, ss);
        new Date(yyyy, mth, dd);
        new Date(ms);

        month:用英文 表示月份名称,从January到December

        mth:用整数表示月份,从(1月)到11(12月)

        dd:表示一个 月中的第几天,从1到31

        yyyy:四位数表示的年份

        hh:小时数,从0(午夜)到23(晚11点)

        mm: 分钟数,从0到59的整数

        ss:秒数,从0到59的整数

        ms:毫秒数,为大于等于0的整数

犬神洛洛子 answered 10 years, 3 months ago

Q群里聊过了。主要是你的 $('#startTime') 文本格式问题。

这个问题可以 追溯到>>

然后我才记起原来解析时间格式上浏览器有的格式是不支持的。


这里解释一下你的思路,首先,你的需求是对 2014-10-01 10:00 这样的字符串做解析成时间。

所以,针对这种格式,首先是 ie new Date('2014-10-01') 会得到 NaN .

因此我们大可改成浏览器都喜欢的格式,比如 10/01/2014
这样, new Date('10/01/2014') 就是你要的日期了,但是这里还有个小时和分的具体时间,
那么由上面 new 到的 Date ,假设赋给了 meDate ,那么可以用 meDate.setHours(hour, minute)

所以改后的代码应该差不多这样:


 function setTime(duration){
        var bTime = $('#startTime').val();
        if(bTime==''){
            alert('请输入开始时间');
            return;
        }else{
             var timePar = bTime.split(' ');
             var timeDate = timePar[0].split('-');
             bTime = timeDate[1]+'/'+timeDate[2]+'/'+timeDate[0];
              var later = new Date(bTime);
              var timeHour = timePar[1].split(':');
              later.setHours(timeHour[0], timeHour[1]);
              later.setDate(later.getDate()+parseInt(duration));
              return later.Format("yyyy-MM-dd hh:mm:ss"); 
        }
    }

最后,我提一下,以后涉及到时间,留意一下 new Date(str) str 的格式问题哟。

疾风D悠月つ answered 10 years, 3 months ago

Your Answer