Node.js中如何每14天自动更新旧日期以展示14天周期收入数据
Node.js 14天周期收入统计日期实现方案
原有代码存在的问题
- 调用
setDate会直接修改原Date对象,导致初始时间被篡改,后续计算出现偏差 - 仅计算了入驻后第一个14天的时间节点,没有做周期滚动逻辑,无法自动适配任意访问时间对应的14天统计区间
- 变量命名
Month和14天周期的实际逻辑不符,提高后续维护成本
可直接复用的实现代码
// 固定14天统计周期 const CYCLE_DURATION = 14 * 24 * 60 * 60 * 1000; // 14天对应的毫秒值 const seller = await Seller.findOne({ seller: req.seller.id }); // 周期计算基准:卖家入驻时间 const baseTime = new Date(seller.createdAt).getTime(); const currentTimestamp = Date.now(); // 计算当前时间距离基准时间经过了多少个完整周期 const completedCycles = Math.floor((currentTimestamp - baseTime) / CYCLE_DURATION); // 计算当前统计周期的起止时间 const cycleStart = new Date(baseTime + completedCycles * CYCLE_DURATION); const cycleEnd = new Date(cycleStart.getTime() + CYCLE_DURATION); console.log('当前14天统计区间:', cycleStart.toLocaleString(), '-', cycleEnd.toLocaleString()); // 直接用起止时间查询对应周期的收入数据即可 // const revenueData = await Income.find({ // seller: req.seller.id, // createdAt: { $gte: cycleStart, $lt: cycleEnd } // })
逻辑说明
- 以卖家入驻时间为固定计算起点,不会出现周期错位,任何时间访问都能自动定位到当前所在的14天统计区间
- 所有时间运算先转时间戳计算,不会修改原始Date对象,没有隐式副作用
- 拿到
cycleStart和cycleEnd两个边界时间后,直接传入数据库查询条件做范围筛选,就能取出对应周期的收入数据 - 如果需要调整为自然时间对齐的14天周期,只需要把
baseTime替换为固定基准时间(比如当年1月1日0点时间戳)即可
内容的提问来源于stack exchange,提问作者maDan kD
相关产品推荐
相关产品推荐

