javascript中new Date()的问题Invalid Date、NaN-NaN的问题

在工作中多次遇到使用 new Date() 的问题,记录一下吧!

在IE,safari, ios中的微信环境下..

new Date('2016-01-01 00:00:00')    //却返回这个值Invalid Date,转换失败

new Date('2016/01/01 00:00:00')  //这下就转换正确了Wed Jan 1 00:00:00 UTC+0800 2014 

具体的原理我也不知道,也没有去查看。应该就是浏览器内核中对Date对象处理方式的不同,就是字符串的格式不被某些浏览器识别而导致的,核心代码我也贴不出来,无法寻根问底

说说解决的方案吧

  1. 填入明确的时间,日期后面加 ‘T’
    var Time = new Date('2016-01-01 00:00:00');   //ios中starTime为Invalid Date、NaN
    
    var Time2 = new Date('2016-01-01T00:00:00');  //日期和时间中间加个T,兼容ios
    

     

  2. 字符串转换的方式
    var date="2016-12-12 10:10:10";
    date=date.replace(new RegExp(/-/gm) ,"/");   //将所有的'-'转为'/'即可
    var d=new Date(date);

     

 给Date添加Format方法的代码段,避免转换

Date.prototype.Format = function (fmt) { //author: meizz
    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(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

var Time = new Date().Format("yyyy/MM/dd hh:mm:ss"); // 避免了转换
var time = new Date(Time );

慕课网资源:
http://blog.sina.com.cn/s/blog_16f8a00b40102xy1s.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值