【问题标题】:Sort array of objects by date in dd/mm/yyyy HH:mm:ss format [duplicate]按 dd/mm/yyyy HH:mm:ss 格式按日期对对象数组进行排序[重复]
【发布时间】:2020-12-04 12:04:58
【问题描述】:

我有一个大型对象数组,其中包含一个字符串类型的日期字段,格式为 dd/mm/yyyyy HH:mm:ss,但我无法正确重新排序。

数组长这样

cases[
   {
      name: a, 
      date:03/04/2020 17:24:17
   },
   {
      name: b, 
      date:04/05/2020 07:21:19
   },
   {
      name: c, 
      date:02/01/2020 11:35:50
   },
]

我尝试按以下方式重新排序,但没有结果

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

【问题讨论】:

  • 您在调试过程中发现了哪些见解?
  • new Date() 不适用于dd/MM 格式。搜索如何使用 dd/MM 解析日期到 javascript 中的日期对象。您可以使用moment 或像这样构建一个简单的解析器:stackoverflow.com/a/38593735/3082296
  • 如果你做 yyyy/mm/dd 你不需要一个函数来排序
  • 返回日期好像格式是 mm/dd/yyyy 我认为,甚至不考虑时间
  • @mplungjan 我需要这种格式,我无法将其转换为另一种格式

标签: javascript arrays date sorting object


【解决方案1】:

试试这个

cases = [{
  name: "a",
  date: "03/04/2020 17:24:17"
}, {
  name: "b",
  date: "04/05/2020 07:21:19"
}, {
  name: "c",
  date: "02/01/2020 11:35:50"
}, ]

const makeDate = str => {
  const [_, dd, mm, yyyy, hh, min, ss] = str.match(/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/);
  return new Date(yyyy, mm - 1, dd, hh, min, ss)
};

cases.sort((a, b) => makeDate(a.date) - makeDate(b.date))

console.log(cases)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多