JavaScript中new Date解析特定格式日期返回null 数组日期排序失效如何解决
问题根因
你使用的DD-MM-YYYY HH:MM:SS日期格式不属于JavaScript Date 构造器支持的标准输入格式,直接传入会得到Invalid Date,数值运算时会转为NaN,导致排序逻辑失效。
解决方法
自定义日期解析函数处理你的格式,再参与排序运算,示例代码如下:
// 适配DD-MM-YYYY HH:MM:SS格式的日期解析函数 function parseCustomDate(dateStr) { const [datePart, timePart] = dateStr.split(' '); const [day, month, year] = datePart.split('-'); const [hour, minute, second] = timePart.split(':'); // 注:JS中Date的月份参数从0开始计数,因此要减1 return new Date(year, month - 1, day, hour, minute, second); } var array = [{id: 1, date: '16-04-2021 14:24:14'}, {id: 2, date: '16-04-2021 14:24:15'}]; // 若不需要保留原数组,可直接用array.sort(...) const sortedArray = array.slice().sort(function(a,b){ return parseCustomDate(b.date) - parseCustomDate(a.date); });
注意事项
- 原生
Array.sort()是原地排序方法,会直接修改原数组,上述代码用slice()做了浅拷贝,避免改动原数组,不需要保留原数组可去掉该调用。 - 自行拆分日期字符串的方案兼容性最高,不会出现不同浏览器对非标准日期格式解析结果不一致的问题。
内容的提问来源于stack exchange,提问作者Mads Hjorth
相关产品推荐
相关产品推荐

