Chrome无法解析日期,但IE可以

时间:2016-08-19 20:10:48

标签: javascript google-chrome date internet-explorer

我在解析网站日期时遇到问题。它曾经在IE和Chrome上运行良好(我还没有尝试过Firefox)。但最近我无法解析chrome上的日期。

我从数据库中获取的日期字符串看起来像是“2016年10月17日12:00 AM”

以下是我用于调试问题的代码

console.log("String = "+item.DueDate);
console.log("new Date = " + new Date(item.DueDate));
console.log("Date Parse = " + Date.parse(item.DueDate));
console.log("Moment Parse = " + moment(item.DueDate));

以下是IE返回的内容:

  

String = 2016年10月17日12:00 AM   
新日期= 2016年10月17日星期一00:00:00 GMT-0400(东部夏令时间)   
日期解析= 1476676800000   
时刻分析= 1476676800000

以下是Chrome返回的内容:

  

String = 2016年10月17日12:00 AM   
新日期=无效日期   
日期解析= NaN   
Moment Parse = NaN

我在我的一个函数中使用Date.parse()来查找日期之间的差异:

function daydiff(first, second) {
    return Math.round((second - first) / (1000 * 60 * 60 * 24));
}

var dif = daydiff(Date.parse(item.DueDate), Date.parse(item.DateShipped));

我应该如何处理我的日期字符串才能使用chrome和Internet Explorer?

固定

所以我通过改变我的web api调用来修复它以返回DateTime而不是字符串。

1 个答案:

答案 0 :(得分:2)

永远不要使用Date构造函数解析字符串(或Date.parse,它们等同于解析),因为它几乎完全依赖于实现。即使是ECMA-262中指定的一种格式也未被所有正在使用的浏览器可靠地解析。

使用定制函数或提供解析和格式化的库,并始终传递格式以解析解析器。合适的图书馆是moment.jsdate.jsfecha.js,但还有很多其他图书馆。

定制功能可能如下所示:

function parseSpecia(s) {
    var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
    var h;
    if (/a[mp]$/i.test(s)) {
        h = /am$/i.test(s)? 0 : 12;
        s = s.replace(/a[mp]$/i,'');
    }
    var b = s.split(/[ :]/)
    return new Date(b[2], months[b[0].toLowerCase().substr(0,3)], b[1],(b[3]%12)+h, b[4]);
}

var s = 'Oct 17 2016 12:00AM';
console.log(parseSpecia(s));

使用库看起来像:

fecha.parse('Oct 17 2016 12:00AM','MMM DD YYYY hh:mm:zz');