Javascript Date.js错误解析ISO 8601 UTC日期

Javascript Date.js错误解析ISO 8601 UTC日期,javascript,datejs,Javascript,Datejs,使用javascript库Date.js,我发现当我将ISO 8601格式的UTC 0 Date传递到Date.parse()函数时,我得到了一个表示相同日期但添加了本地时区的对象 比如说, 鉴于日期:2012-08-27T14:57:00Z(ISO 8601格式),显示的时间为14:57 UTC,为什么将其解析为14:57 GMT-400而不是10:57 GMT-400 我必须在行动中表现出来 请告诉我是否确实存在错误,或者我对解析结果的理解是否不正确。这似乎是Date.js的错误。使用新日期

使用javascript库Date.js,我发现当我将ISO 8601格式的UTC 0 Date传递到Date.parse()函数时,我得到了一个表示相同日期但添加了本地时区的对象

比如说,

鉴于日期:2012-08-27T14:57:00Z(ISO 8601格式),显示的时间为14:57 UTC,为什么将其解析为14:57 GMT-400而不是10:57 GMT-400

我必须在行动中表现出来


请告诉我是否确实存在错误,或者我对解析结果的理解是否不正确。

这似乎是Date.js的错误。使用
新日期('2012-08-27T14:57:00Z')
返回正确的日期。

是的,这是一个错误-甚至

我可以推荐使用图书馆吗?例如:

console.log(矩('2012-08-27T14:57:00Z').toString())


。。。将正确认识到UTC时间是给定的。

这是由DateJS的语法分析器的错误实现造成的

基本上,旧版本只是检查是否可以使用内置解析器,新版本尝试使用语法解析,但忘记先尝试原始步骤,语法解析器无法使用时区(这是一个bug,但不同)

将解析函数替换为以下函数:

$D.parse = function (s) {
    var date, time, r = null;
    if (!s) {
        return null;
    }
    if (s instanceof Date) {
        return s;
    }

    date = new Date(Date._parse(s));
    time = date.getTime();
    // The following will be FALSE if time is NaN which happens if date is an Invalid Date 
    // (yes, invalid dates are still date objects. Go figure.)
    if (time === time) {
        return date;
    } else {
        // try our grammar parser
        try {
            r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
        } catch (e) {
            return null;
        }
        return ((r[1].length === 0) ? r[0] : null);
    }
};
核心代码的更新版本(将来将修复开放的bug)可在以下位置获得:


事实证明是的,这是Date.js中的一个bug。自2008年以来,我没有看到任何新的发展,所以我假设它永远不会被修复。感谢您注意到它与new Date(…)一起工作,因为这将是我目前使用的修复程序。进一步检查后,发现开发人员不应该再使用Date.js(请参阅此链接)。这是一个很好的提示,可以让人们了解这个时刻。为什么我以前没有遇到过momente.js、优秀的库、好的呼叫@raina77ow:)