为什么日期排序在所有浏览器中都不起作用?

时间:2019-01-29 00:33:37

标签: reactjs sorting

我正在尝试为可在浏览器中使用的新闻列表实施日期排序方法。但是,我尝试过的一种方法效果很好,仅在Chrome中有效:

 origArt.sort(function(a, b) {
      var dateA = new Date(a.date), dateB = new Date(b.date);
                        return dateB - dateA;
                              });

我还尝试了此代码,在其他排序问题中建议将其作为可能的解决方案:

origArt.sort(function(a,b){
        return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
                          });

但是,由于JSON中的日期与年份不同;月和年;以及月份,年份和日期;新闻列表倒排 字母顺序,而不是时间倒序。

1 个答案:

答案 0 :(得分:0)

  

它们是字符串,例如:“ 2018。”,“ 2015年4月8日”和“ 2015年9月”。

您的问题是这些不是有效的日期字符串。通过一些快速测试,Chrome似乎对您的意思有所猜测,而其他浏览器则没有。

Chrome浏览器:

new Date("2018.")
// Mon Jan 01 2018 00:00:00 GMT-0800 (Pacific Standard Time)

Firefox:

new Date("2018.")
// Invalid Date

并且由于Invalid Date > Invalid Date始终为假,因此它不进行任何排序。这也不只是取消期限,因为“ 2015年9月”也可以在Chrome浏览器中使用,但在Firefox中无法使用。

理想情况下,您应该修复JSON或从其生成的任何代码,以使用可解析的日期字符串。如果不是这样,您可能必须编写一个自定义的解析函数来处理您可能获得的所有可能格式,或者看看像Moment.js这样的库是否可以为您处理。