如何在JavaScript中按最新日期优先正确排序JSON对象?
如何修正按日期时间排序的逻辑问题
我尝试对API返回的JSON对象按最新日期时间优先排序,但当前实现把2022年12月判定为比2023年1月更新。以下是我的代码和错误排序结果,求修正方法。
当前代码
result = [ { "date": "21/12/2022", "time": "10:41:10", }, { "date": "20/12/2022", "time": "12:42:21", }, { "date": "15/12/2022", "time": "09:26:02", }, { "date": "14/12/2022", "time": "10:20:54", }, { "date": "09/01/2023", "time": "18:58:17", }, { "date": "09/01/2023", "time": "18:57:34", }, { "date": "08/01/2023", "time": "12:12:38", }] if (result.length > 1) { result.sort((a, b) => { const dateTime1 = new Date(a.date + a.time); const dateTime2 = new Date(b.date + b.time); return dateTime2 - dateTime1; }); console.log(result); };
错误排序结果
[ {date: "21/12/2022", time: "10:41:10"}, {date: "20/12/2022", time: "12:42:21"}, {date: "15/12/2022", time: "09:26:02"}, {date: "14/12/2022", time: "10:20:54"}, {date: "09/01/2023", time: "18:58:17"}, {date: "09/01/2023", time: "18:57:34"}, {date: "08/01/2023", time: "12:12:38"} ]
问题原因
直接拼接date和time传给Date构造函数会触发两个问题:
- 你的日期格式是
DD/MM/YYYY,但JS的Date默认会按美式MM/DD/YYYY解析,导致日期识别错误(比如21/12/2022会被错误解析); - 日期和时间直接拼接无分隔符,
Date无法正确识别时间部分。
修正代码
手动拆分日期和时间的各部分,构造正确的Date对象:
if (result.length > 1) { result.sort((a, b) => { // 自定义解析函数,处理DD/MM/YYYY格式的日期和时分秒 const parseDateTime = (dateStr, timeStr) => { const [day, month, year] = dateStr.split('/').map(Number); const [hours, minutes, seconds] = timeStr.split(':').map(Number); // Date构造函数的月份是0-based(0代表1月),所以要减1 return new Date(year, month - 1, day, hours, minutes, seconds); }; const dateTime1 = parseDateTime(a.date, a.time); const dateTime2 = parseDateTime(b.date, b.time); return dateTime2 - dateTime1; // 倒序排序,最新日期在前 }); console.log(result); }
修正后正确结果
[ {date: "09/01/2023", time: "18:58:17"}, {date: "09/01/2023", time: "18:57:34"}, {date: "08/01/2023", time: "12:12:38"}, {date: "21/12/2022", time: "10:41:10"}, {date: "20/12/2022", time: "12:42:21"}, {date: "15/12/2022", time: "09:26:02"}, {date: "14/12/2022", time: "10:20:54"} ]
内容的提问来源于stack exchange,提问作者Rwclements
相关产品推荐
相关产品推荐

