JavaScript日期过滤问题:如何排除本周栈中的今日与昨日数据
日期分组过滤:排除今日、昨日的本周数据解决方案
你的问题核心是thisWeek分组未排除已独立划分的今日、昨日数据,只需在该分组的过滤逻辑中添加排除条件即可,以下是修改后的完整代码:
const filterByDate = (data) => { const tempStacks = {} as any; const date = new Date(); // 统一将时间设为0点,避免时分秒干扰日期判断 date.setHours(0, 0, 0, 0); const yesterday = new Date(date); yesterday.setDate(date.getDate() - 1); const getWeek = (d: Date) => { const dt = new Date(d.getFullYear(), 0, 1); return Math.ceil((((d.getTime() - dt.getTime()) / 86400000) + dt.getDay()) / 7); }; const thisWeek = getWeek(date); // 筛选今日数据 tempStacks.today = data.filter(obj => { const objDate = new Date(obj.date); objDate.setHours(0, 0, 0, 0); return objDate.getTime() === date.getTime(); }); // 筛选昨日数据 tempStacks.yesterday = data.filter(obj => { const objDate = new Date(obj.date); objDate.setHours(0, 0, 0, 0); return objDate.getTime() === yesterday.getTime(); }); // 筛选本周数据(排除今日、昨日) tempStacks.thisWeek = data.filter(obj => { const objDate = new Date(obj.date); objDate.setHours(0, 0, 0, 0); const isThisWeek = getWeek(objDate) === thisWeek; const isToday = objDate.getTime() === date.getTime(); const isYesterday = objDate.getTime() === yesterday.getTime(); return isThisWeek && !isToday && !isYesterday; }); // 筛选过去两周数据(本周之前的两周) tempStacks.lastTwoWeeks = data.filter(obj => { const objDate = new Date(obj.date); objDate.setHours(0, 0, 0, 0); const objWeek = getWeek(objDate); return objWeek === thisWeek - 1 || objWeek === thisWeek - 2; }); return tempStacks; }
关键改动说明
- 统一日期基准:将所有参与判断的日期时分秒设为0,避免因数据中包含具体时间导致的匹配错误
- 新增排除逻辑:在
thisWeek的过滤条件中加入!isToday && !isYesterday,确保今日、昨日数据不会重复出现在本周分组 - 类型规范:给
getWeek函数的参数添加Date类型标注,符合TypeScript语法要求
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

