【问题标题】:Why isn't date sort working across browsers?为什么日期排序不能跨浏览器工作?
【发布时间】:2019-01-29 00:33:37
【问题描述】:

我正在尝试为跨浏览器工作的新闻列表实现日期排序方法。但是,我尝试过的一种效果很好的方法仅适用于 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 中的日期与年份不同;月和年;以及月、年和日;新闻列表倒序排列 按字母顺序,而不是逆时间顺序。

【问题讨论】:

  • 变量ab有哪些例子?它们是格式为“2000”、“12/2000”、“12/1/2000”的字符串吗?
  • 您的第一个似乎应该可以工作。当您在其他浏览器中尝试时会发生什么?
  • 它们是字符串,例如:“2018.”、“April 8, 2015.”和“September 2015”。 @JohnMontgomery -- 在 Safari 和 Firefox 中,列表是根据项目在 JSON 文件中的顺序输出的。

标签: reactjs sorting


【解决方案1】:

它们是字符串,例如:“2018.”、“April 8, 2015.”和“September 2015”。

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

铬:

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

火狐:

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

而且由于Invalid Date &gt; Invalid Date 始终为假,它不会对任何内容进行排序。这不仅仅是删除句号的问题,因为“2015 年 9 月”也适用于 Chrome,但在 Firefox 中失败。

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

【讨论】:

猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多