我的JSON字符串包含一个日期字段,该字段返回这样一个值:
"2009-04-04T22:55:16.0000000-04:00"
我特别感兴趣的是只解析日期而不是时间。我试过使用一个reviver函数,但有趣的是reviver函数从来没有被调用过!(在Firefox上试过)
下面是我的代码:
var Site = {
.....
dateReviver: function(key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
},
loadArticle: function(id) {
....
proxy.getArticle(id, function(response) {
var data = JSON.parse(response.result, Site.dateReviver);
....
});
}
};
loadArticle
中的JSON.parse从不调用dateReviver
。
我投资了一整天,但运气不好!有人能帮帮我吗?
7条答案
按热度按时间pbwdgjma1#
使用TypeScript,我的解决方案如下:
最好的;- )它使用一个匿名的datereviver,JSON.parse会在每个属性上调用它。reviver的逻辑是检查属性是否是字符串类型,如果是,它是否看起来像一个日期的开始...如果是一个日期,那么让new Date(value)来做实际的解析...这样就支持所有时区的变体。
希望能有所帮助!
kb5ga3dv2#
1.正则表达式需要“Zulu”时区(结尾为“Z”字符),而示例日期-时间字符串显示的是数字时区('-04:00')。以下正则表达式将同时接受这两种时区:
如果时区数字不为零,您可能希望在解析和/或转换为UTC后实际修改日期,以符合时区。
1.我可以看到dateReviver()被击中。请在浏览器中尝试以下操作:
我在浏览器中看到以下内容,表明解析成功:
ppcbkaq53#
扩展 AJAX 转换器的默认设置对我来说很有效:
至
qvtsj1bj4#
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
的使用不会调整时区信息的日期,范例中为
-4:00
。另一种方法是让Date()为您进行解析:
如果JSON是用JSON.stringify()格式化的,那么它应该是UTC(Z)。
nvbavucw5#
ygya80vv6#
嵌入式解决方案
siotufzp7#
我今天遇到了这个问题,我有一个不同的方法,从那些由其他人贡献。
如果你知道包含日期的键提前的时间,你可以写这样的reviver:
然后,您可以像这样使用它:
或者,您可以使用全局
keysToParse
对象,而不是每次都重新定义它