IE浏览器内遇到new Date()带参返回NaN解决方法;

291 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述: 做项目的时候,有一个航班运行的门户网,用户打开网站页面顶部右侧需要显示一个当前时间;下面还要根据当前时间和即将执行航班时间算距离当前运行时间为n年n天n时n分n秒,代码写完后测试浏览器显示效果时发现,非IE浏览器内核均正常显示,IE浏览器下显示效果的时候发现结果显示为:undefine.

二、分析:

解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数可以用 new Date() 和 Date.parse()方法。但是在ie浏览器和Firefox中new Date()方法会有兼容性问题会返回NaN;

通过IE开发者工具控制台执行js代码发现,new Date("2014-01-01 12:11:12").getTime() 在IE下会返回NaN,而其他浏览器可以正常返回毫秒数。

三、解决办法:

通过Date.parse()方法(这种方法亲测可以)

parse() 方法可解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数。 由于parse()方法参数的日期格式为yyyy/MM/dd,所以需要将现有的日期格式通过replace()方法将日期字符串替换成yyyy/MM/dd格式。

var date = "2022-03-19 12:00:19";
Date.parse(date.replace(/-/g,"/"));

自定义一个NewDate方法,通过调用NewDate方法获得毫秒数

function NewDate(str){   

   if(!str){     

     return 0;   

   }   

   arr=str.split(" ");   

   d=arr[0].split("-");   

  t=arr[1].split(":");    

  var date = new Date();   

  date.setUTCFullYear(d[0], d[1] - 1, d[2]);    

  date.setUTCHours(t[0], t[1], t[2], 0);    return date;  

}

测试结果

经谷歌浏览器、狐火浏览器、IE浏览器 均能正常显示。