javascript - 如何更改 chromes 日期解析/排序以匹配 ff/ie 日期解析?

标签 javascript jquery google-chrome date momentjs

所以我在这里遇到了一个非常奇怪的问题,目前没有想法。

我有以下函数来按属性 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();

但这似乎也不起作用。目前我没有想法,我希望这里的人能帮助我解决我的问题:如何更改 chromes 日期解析以匹配 ff/ie 解析?还是我脑子里有一个真正的大结并且这里出了其他问题?

很高兴收到您的来信!

编辑 为了让事情更清楚,我在这里创建了这个 fiddle : http://jsfiddle.net/o3zh2kv4/8/

在 IE 和 Firefox 中,输出为:

测试1、测试8、测试2、测试9、测试3、测试10、测试4、测试11、测试5、测试12、测试6、测试13、测试7、测试14、

这是我想要的进一步逻辑输出。但在 Chrome 中,我得到以下信息:

测试8、测试1、测试9、测试2、测试10、测试3、测试4、测试11、测试5、测试12、测试6、测试13、测试7、测试14、

我不知道为什么会这样。很高兴在这里得到一些帮助!我也需要 chrome 来更改顺序。

最佳答案

您面临的问题很可能是由于不同的浏览器(引擎)实现不同的排序算法而引起的。

您体验到的差异(乍一看)都集中在没有差异的元素上(例如,从排序函数返回 0),因此没有描述确定性的排序行为。

要解决此问题,您需要实现自定义排序算法,或引入更多排序标准。

关于javascript - 如何更改 chromes 日期解析/排序以匹配 ff/ie 日期解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860328/

相关文章:

javascript - 流量: Inference error in for-of loop

javascript - 使用 knockoutjs 分层 ul 列表崩溃

Jquery Mobile Photoswipe无法处理外部页面

android - 1px 边框在放大移动 chrome 之前不会显示

android - Cordova + JqueryMobile : Ajax fails with

javascript - 有没有办法让notepad++将4个空格替换为2个?

javascript - 转换在 Javascript 中不起作用

javascript - 在javascript中使用带有数组的单击来更改图像

javascript - 如果 X = 宽度和 X = 高度,JS 图像检测不会为图像添加类

javascript - 您可以将事件监听器定位到特定的 Chrome 警报吗?