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,搜索未果。望老手帮助。

阅读 10.6k
3 个回答

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

这个问题可以追溯到>>

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


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

所以,针对这种格式,首先是 ienew 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的格式问题哟。

    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的整数

我也折腾了一下,查了资料说,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"); 
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题