Javascript Date.js错误解析ISO 8601 UTC日期
使用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 我必须在行动中表现出来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的错误。使用新日期
请告诉我是否确实存在错误,或者我对解析结果的理解是否不正确。这似乎是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:)