【发布时间】:2015-06-16 06:33:28
【问题描述】:
所以我在这里遇到了一个非常奇怪的问题,目前没有想法。
我有以下函数通过属性RowDate解析和排序一个json对象,
包含具有以下格式的日期字符串:"/Date(1389682861507+0100)/"。
orderByDate: function (json) {
debug('[DataCollection::orderByDate], json before ordering: ', json);
_.each(json.LineDefinitions, function (line, i) {
json.LineDefinitions[i].Artifacts.sort(function (a, b) { //Artifacts is an Array of json subobjects containing "RowDate"
return MyApp.Utils.formatDate(a.RowDate) - MyApp.Utils.formatDate(b.RowDate);
});
});
debug('[DataCollect::orderByDate], json after ordering: ', json);
return json;
},
这里每个RowDate 都包含一个与上面给出的字符串类似的字符串(但日期不同)。
formatDate-函数如下所示:
MyApp.Utils.formatDate = function (date) {
var ret;
if (date instanceof Date) {
ret = '/Date(' + date.getTime()
+ (date.getTimezoneOffset() <= 0 ? '+' : '-')
+ String(('0000' + ((date.getTimezoneOffset() / 60) * -100)).substr(-4)) + ')/';
} else {
ret = new Date(Number(String(date).replace(/(^.*\()|([+-].*$)/g, '')));
}
return ret;
};
对于我有问题的情况,程序流使用else-条件。
现在它在 IE10 和 11(原文如此!)以及 Firefox 38.0.5 中运行良好,结果顺序正好。但是在 chrome 最新稳定版(你没听错)v43 中,我在我的 console.log 中得到了错误的顺序,导致我的应用程序稍后出现意外行为。
所以我在这里找到了这个帖子:Different values with Date() in Chrome and IE(这里在德国,当地时间可能不同,所以我认为这可能是原因?!)
并尝试使用 momentjs 将 formatDate-else-line 更改为以下行(后来来到这个项目。我改变的第一件事是到处使用 momentjs...):
ret = moment.utc(date).toDate();
=> 没有效果,所以我也从 momentjs-docs 中尝试了这个:
ret = moment(date, moment.ISO_8601).toDate();
但这似乎也不起作用。目前我没有想法,我希望你们这里的人可以帮助我解决我的问题:如何更改 chrome 日期解析以匹配 ff/ie 解析?还是我脑子里真的有一个大结,而这里出了什么问题?
很高兴收到您的来信!
编辑 为了让事情更清楚,我在这里创建了这个小提琴: http://jsfiddle.net/o3zh2kv4/8/
在 IE 和 firefox 中,输出为:
test1, test8, test2, test9, test3, test10, test4, test11, test5, test12, test6, test13, test7, test14,
这是我想要的进一步逻辑的输出。但在 chrome 中,我得到以下信息:
test8, test1, test9, test2, test10, test3, test4, test11, test5, test12, test6, test13, test7, test14,
我不知道为什么会这样。在这里得到一些帮助会很棒!我也需要 chrome 来更改顺序。
【问题讨论】:
-
您能更详细地描述您面临的问题吗?你去掉了时区的日期字符串,所以这可能是个问题。
-
@Rouby 感谢您到目前为止所做的努力,目前我的尝试似乎还不够清楚。我添加了一个小提琴,我认为它更好地描述了我的问题。能得到进一步的帮助会很棒! :)
-
我已经删除了我之前的答案(因为它不能解决您的问题)并添加了一个希望更有帮助的答案。
标签: javascript jquery google-chrome date momentjs