You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:14:51