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

如何使用moment计算最近3、7、30、90天的订单总金额之和

订单多时间区间金额统计实现方案

实现思路

  • 提前计算4个统计区间的起始时间,避免循环内重复计算提升性能
  • 遍历订单时先把created_at转为moment可识别的时间对象,过滤非法数据后按区间归属累加金额
  • 用到的moment核心API:subtract()计算时间偏移量、isSameOrAfter()判断时间是否在区间范围内

完整实现代码

// 需先按项目环境引入moment库,Node环境引入示例:const moment = require('moment')
const getIntervalsSum = (orders) => {
    var threeDaysSum = 0;
    var sevenDaysSum = 0;
    var thirtyDaysSum = 0;
    var ninetyDaysSum = 0;

    const now = moment();
    // 计算各区间起始时间,clone是为了避免修改原moment对象
    // 若需要按自然日统计(从当日0点开始算),可在每个subtract后加.startOf('day')
    const threeDaysAgo = now.clone().subtract(3, 'days');
    const sevenDaysAgo = now.clone().subtract(7, 'days');
    const thirtyDaysAgo = now.clone().subtract(30, 'days');
    const ninetyDaysAgo = now.clone().subtract(90, 'days');

    for(var i=0; i<orders.length;i++) {
        const order = orders[i];
        // 转为moment时间对象,特殊格式可传第二个参数指定,比如moment(order.created_at, 'YYYY-MM-DD HH:mm:ss')
        const orderTime = moment(order.created_at);
        // 跳过时间格式非法的订单
        if (!orderTime.isValid()) continue;
        // 兼容金额非数字的脏数据
        const amount = Number(order.total) || 0;

        if(orderTime.isSameOrAfter(threeDaysAgo)) {
            threeDaysSum += amount;
        }
        if(orderTime.isSameOrAfter(sevenDaysAgo)) {
            sevenDaysSum += amount;
        }
        if(orderTime.isSameOrAfter(thirtyDaysAgo)) {
            thirtyDaysSum += amount;
        }
        if(orderTime.isSameOrAfter(ninetyDaysAgo)) {
            ninetyDaysSum += amount;
        }
    }
    // 返回各区间统计结果
    return {
        threeDaysSum,
        sevenDaysSum,
        thirtyDaysSum,
        ninetyDaysSum
    }
};

内容的提问来源于stack exchange,提问作者gabogabans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:02