如何实现通知从旧到新排序及New/This Week/Oldest分类的算法
通知分类与从旧到新排序实现方案
一、先完成从旧到新排序
先把所有通知按接收时间从早到晚排好序,核心是用可比较的时间格式做判断:
- 确保每条通知的
receiveTime字段是标准格式(比如ISO字符串"2024-05-20T14:30:00"或毫秒时间戳) - 用数组排序方法,把时间更早的通知排在前面:
// 示例:notifications是原始通知数组,每个元素含receiveTime字段 notifications.sort((a, b) => { const timeA = new Date(a.receiveTime).getTime(); const timeB = new Date(b.receiveTime).getTime(); // 升序排序,实现旧→新的顺序 return timeA - timeB; });
二、按规则划分三类
排序完成后,基于当前时间确定分类的时间范围,把通知分别归类:
- 先计算关键时间节点:
const now = Date.now(); // 当日0点0分0秒的时间戳 const todayStart = new Date(new Date().setHours(0, 0, 0, 0)).getTime(); // 7天前的时间戳(当前时间减去7天的毫秒数) const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1000;
- 遍历排序后的通知,分配到对应分类:
const categorized = { New: [], ThisWeek: [], Oldest: [] }; notifications.forEach(notice => { const noticeTime = new Date(notice.receiveTime).getTime(); if (noticeTime >= todayStart) { categorized.New.push(notice); } else if (noticeTime >= sevenDaysAgo) { categorized.ThisWeek.push(notice); } else { categorized.Oldest.push(notice); } });
注意事项
- 时区差异可能导致分类偏差,建议统一用UTC时间存储和计算接收时间
- 如果在后端处理,逻辑完全一致,只需把语法换成对应后端语言(比如Python、Java),核心还是时间戳的比较与范围判断
内容的提问来源于stack exchange,提问作者shimomaru
相关产品推荐
相关产品推荐

