Protractor如何按日期/时间对列表进行排序?转换日期字符串无效怎么办
按自定义格式日期对列表排序的实现方案
你遇到的日期解析失败问题是因为原生Date构造器无法识别你日期字符串中的|分隔符,只要预处理掉该字符即可正常解析,再基于解析出的时间戳完成排序即可,具体实现如下:
1. 日期解析函数实现
首先写一个工具函数,把你当前格式的日期字符串转换为可用于排序的时间戳:
function parseCustomDate(dateStr) { // 移除日期字符串中的|分隔符,适配原生Date的解析规则 const processedStr = dateStr.replace('|', '').trim(); return new Date(processedStr).getTime(); }
2. 列表排序逻辑
假设你的列表中每条数据的日期字段为eventTime,排序代码如下:
// 示例待排序列表 const rawList = [ { title: "活动A", eventTime: "Mon, Nov 1 | 8:30 PM" }, { title: "活动B", eventTime: "Sun, Oct 31 | 9:00 AM" }, { title: "活动C", eventTime: "Mon, Nov 1 | 2:15 PM" } ]; // 按时间升序排序(从早到晚) const sortedAscList = rawList.sort((item1, item2) => { return parseCustomDate(item1.eventTime) - parseCustomDate(item2.eventTime); }); // 按时间降序排序(从晚到早) const sortedDescList = rawList.sort((item1, item2) => { return parseCustomDate(item2.eventTime) - parseCustomDate(item1.eventTime); });
额外注意点
- 你当前使用的日期格式没有携带年份,默认会被解析为当前年份,如果你的列表涉及跨年数据,需要在预处理字符串时补充对应年份信息,避免解析错误
- 英文的星期、月份缩写在所有主流浏览器和Node.js环境中都可被正常解析,无需额外处理locale配置
内容的提问来源于stack exchange,提问作者Venkatesh Rb
相关产品推荐
相关产品推荐

