JavaScript中对包含日期与时间的字符串进行排序的问题求解
JavaScript日期时间字符串排序修复方案
核心问题原因
DD/MM/YYYY格式的日期字符串无法被JavaScript原生Date构造函数正确解析:默认规则下/分隔的第一组数字会被识别为月份,比如29/09/2020会被判定为非法月份,生成无效日期,直接导致排序逻辑出错。
修复方案
先手动拆分日期字符串的各段字段,构造合法的Date对象后再进行排序,完整实现代码如下:
const x = [ '29/09/2020 11:55:56', '04/08/2021 11:57:06', '30/09/2019 15:19:49', '04/08/2021 13:57:06' ] // 日期时间字符串转时间戳工具函数 function parseDateTimeStr(str) { const [datePart, timePart] = str.split(' ') const [day, month, year] = datePart.split('/').map(Number) const [hour, minute, second] = timePart.split(':').map(Number) // JavaScript中月份从0开始计数,因此需要减1 return new Date(year, month - 1, day, hour, minute, second).getTime() } // 按时间从新到旧排序,无需额外调用reverse x.sort((a, b) => parseDateTimeStr(b) - parseDateTimeStr(a)) console.log(x)
输出结果
运行上述代码将得到期望的排序结果:
["04/08/2021 13:57:06", "04/08/2021 11:57:06", "29/09/2020 11:55:56", "30/09/2019 15:19:49"]
补充说明
如果需要改为按时间从旧到新排序,仅需要调整sort回调内的参数顺序即可:
x.sort((a, b) => parseDateTimeStr(a) - parseDateTimeStr(b))
内容的提问来源于stack exchange,提问作者gobigef
相关产品推荐
相关产品推荐

