Date.js错误地分析了ISO 8601 UTC日期
Date.js parsing an ISO 8601 UTC date incorrectly
使用javascript库Date.js,我发现当我将一个ISO 8601格式的UTC 0日期传递到Date.parse()函数时,我得到的对象表示相同的日期,但添加了本地时区。
例如,
考虑到日期:2012-08-27T14:57:00Z(ISO 8601格式),显示的时间为14:57 UTC,为什么会将其解析为14:57 GMT-400,而不是10:57 GMT-400?
我制作了一把小提琴来表演。
请告诉我是否真的有错误,或者我对解析结果的理解是否不正确。
是的,这是一个错误,甚至是一个已报告的错误。
我可以推荐使用Moment.js库吗?例如:
console.log(moment('2012-08-27T14:57:00Z').toString());
将正确识别给定的UTC时间。
这似乎是Date.js的错误。使用new Date('2012-08-27T14:57:00Z')
返回正确的日期。
这是由DateJS的语法解析器的错误实现引起的。
基本上,旧版本只是检查它是否可以使用内置的解析器,新版本尝试使用语法解析,但忘记先尝试原始步骤,语法解析器无法使用时区(这是一个错误,但不同)。
将解析函数替换为以下函数:
$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);
}
};
更新版本的核心代码(并将在未来修复开放的错误)可在这里获得:
https://github.com/abritinthebay/datejs/
相关文章:
- 按ISO 8601日期对数组进行排序
- Date.js错误地分析了ISO 8601 UTC日期
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- ISO 8601日期JS解释差异-IE/FF与Chrome
- .Net Ticks 使用 JavaScript 转换为 ISO 8601 日期格式
- 转换 ISO-8601 时间戳
- 如何使用 Javascript 将 ISO 8601 日期格式化为更易读的格式
- 使用 javascript 将 ISO 8601 日期字符串格式化为凌晨 0:00
- 采用 ISO-8601 格式的 .NET WebService JSON 日期
- 比较 JavaScript 中的 ISO 8601 周期
- 将 ISO 8601 时间格式转换为正常持续时间
- 如何将 YouTube API 持续时间(ISO 8601 持续时间,格式为 PT#M#S)转换为秒
- 在Java / JavaScript中解析ISO-8601持续时间
- 将时间转换为 ISO 8601 格式
- ECMAScript 5日期.ISO 8601测试用例的分析结果
- 比较2个ISO 8601时间戳和输出秒/分钟差
- 如何在ISO 8601中用javascript输出不带毫秒和Z的日期
- 在Javascript/Angular中创建一个ISO 8601持续时间
- ISO 8601日期格式-使用javascript添加日期
- 如何在JavaScript中获取ISO 8601周的开始和结束日期时间