【问题标题】:Sorting array of dates object not working in javascript排序日期对象数组在javascript中不起作用
【发布时间】:2016-11-30 01:59:36
【问题描述】:

我在下面有一个 JavaScript 数组。

 const arr = [
     "2016-10-10 12:03:05",
     "2016-10-10 12:03:05",
     "2016-10-10 2:30:01",
     "2016-10-10 2:30:01",
     "2016-10-10 2:00:06",
     "2016-10-10 2:00:06",
     "2016-10-10 2:00:06",
     "2016-10-10 1:04:01",
     "2016-10-10 1:04:01"
 ];

我想先按降序或最新日期排序。

我期待下面的代码为我整理我的数据

 console.log('the real sort is', arr.sort((a,b) => moment(b).diff(moment(a))));

但是上面的打印

[ 
  "2016-10-10 12:03:05", 
  "2016-10-10 12:03:05", 
  "2016-10-10 2:30:01", 
  "2016-10-10 2:30:01", 
  "2016-10-10 2:00:06", 
  "2016-10-10 2:00:06", 
  "2016-10-10 2:00:06", 
  "2016-10-10 1:04:01", 
  "2016-10-10 1:04:01"
]

和 console.log('真正的排序是', arr.sort((a,b) => moment(a).diff(moment(b))));

返回

[
 "2016-10-10 1:04:01",
 "2016-10-10 1:04:01",
 "2016-10-10 2:00:06",
 "2016-10-10 2:00:06",
 "2016-10-10 2:00:06",
 "2016-10-10 2:30:01",
 "2016-10-10 2:30:01",
 "2016-10-10 12:03:05",
 "2016-10-10 12:03:05"
]

在我看来它只是反转索引。请问我如何对这种数组进行相应的排序?任何帮助将不胜感激

更新

非常抱歉浪费您的时间。我天真地忘记了,误以为时间是 12 小时格式,因此预计下午时间会晚于上午时间。不仅我错了,而且事实证明我们有一个角管,可以将显示转换为 12 小时当量和当地时间。所以我的转换应该没问题,不幸的是我花了好几个小时才意识到这一点。我再次道歉。

【问题讨论】:

  • @TimSheehan 已经尝试过了,已经尝试了我在这里问之前提到的所有解决方案。我也很困惑。
  • @zerkms 我预计 2:00:06 是最近的时间,然后是 1 和 12。
  • 只需将它们排序为字符串。

标签: javascript arrays sorting date


【解决方案1】:

没有moment,你可以很容易地做到这一点:

arr.sort((a, b) => new Date(a) - new Date(b));

当你减去 2 个日期对象时,它们的 valueOf() 方法将被调用,该方法返回该日期对应的时间戳。

【讨论】:

  • 我试过new Date(a).getTime() - new Date(b).getTime()。得到相同的结果。
  • 上面的代码按我的预期打印:["2016-10-10 1:04:01", "2016-10-10 1:04:01", "2016-10-10 2:00:06", "2016-10-10 2:00:06", "2016-10-10 2:00:06", "2016-10-10 2:30:01", "2016-10-10 2:30:01", "2016-10-10 12:03:05", "2016-10-10 12:03:05"]jsfiddle.net/bo8bjaan
  • @EvanTrimboli 抱歉刚刚意识到它是 24 小时格式的。完全被误解了。
猜你喜欢
  • 2015-09-08
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2021-06-01
  • 2015-04-19
  • 2018-09-18
  • 2020-12-19
相关资源
最近更新 更多