You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按指定日期格式排序对象数组并修正排序错误

嘿,我来帮你搞定这两个JavaScript日期排序的问题!

问题1:如何在JavaScript中对格式为'MMMM Do YYYY, h:mm:ss a'的日期进行排序?

这种带月份全称、序数词(比如12th)的日期字符串没法直接用字符串比较来排序,因为字符串的字典序和实际日期顺序不匹配。正确的思路是先把日期字符串转换成JavaScript的Date对象,再通过比较日期的时间戳来排序。

举个例子,假设你有这样的日期数组:

const dateStrings = [
  "March 12th 2017, 10:00:00 AM",
  "March 18th 2017, 09:00:00 AM",
  "March 12th 2017, 05:00:00 AM"
];

你可以这样排序:

// 升序排序(从早到晚)
const sortedAsc = dateStrings.sort((a, b) => {
  // 将字符串转为Date对象
  const dateA = new Date(a);
  const dateB = new Date(b);
  // 比较时间戳,返回差值实现排序
  return dateA.getTime() - dateB.getTime();
});

// 降序排序(从晚到早)
const sortedDesc = dateStrings.sort((a, b) => {
  const dateA = new Date(a);
  const dateB = new Date(b);
  return dateB.getTime() - dateA.getTime();
});

注意:new Date()可以直接解析'MMMM Do YYYY, h:mm:ss a'这种格式,但如果遇到某些特殊地区或格式兼容问题,你可能需要手动解析字符串(比如用正则提取年、月、日、时、分、秒,再构造Date对象),不过大部分主流浏览器都支持这种格式的直接解析。

问题2:修正对象数组的日期排序逻辑

先来看你遇到的问题:你的日期格式是Mar 12 2017 10:00:00 AM,根本没有斜杠/,所以你用b.Date.split('/')的时候,得到的是一个只包含原日期字符串的数组,reverse().join()之后还是原字符串,这种情况下用localeCompare完全起不到正确的日期排序作用,这就是结果不符合预期的原因。另外还要注意:你的对象里的属性是小写的date,但你代码里写的是大写的Date,这也是一个明显的错误点!

修正后的代码如下:

var array = [ 
  { id: 1, date: 'Mar 12 2017 10:00:00 AM' }, 
  { id: 2, date: 'Mar 12 2017 08:00:00 PM' }, 
  { id: 3, date: 'Mar 12 2017 05:00:00 AM' }, 
  { id: 4, date: 'Mar 18 2017 09:00:00 AM' } 
];

// 降序排序(从最晚到最早)
const sortedPatients = array.sort((a, b) => {
  // 注意是小写的date,不是Date!
  const dateA = new Date(a.date);
  const dateB = new Date(b.date);
  // 用b的时间戳减a的,实现降序
  return dateB.getTime() - dateA.getTime();
});

console.log(sortedPatients.map(item => item.id)); 
// 输出:[4, 2, 1, 3]

这里解释下结果:

  • id4的日期是3月18日,比其他3月12日的都晚,排第一;
  • id2的日期是3月12日晚上8点,比id1的上午10点晚,排第二;
  • id1的上午10点比id3的上午5点晚,排第三;
  • id3排最后。

这是符合实际日期顺序的正确结果,你提到的预期结果id4, id2, id3, id1可能是笔误哦,因为id3的日期比id1早,不可能排在id1前面~

内容的提问来源于stack exchange,提问作者sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:46:58