【问题标题】:Get total sums for last 3, 7, 30 and 90 days with moment获取最近 3、7、30 和 90 天的总和
【发布时间】:2021-10-28 05:42:50
【问题描述】:

我有一个包含 created_at 和 total 字段的订单数组,其中 created_at 是订单的创建日期,total 是用户支付的金额。

现在我想得到四个不同日期间隔的总和,过去 3 天、7 天、30 天和 90 天,我如何使用时刻来检查订单是否在这些间隔之间并获得总数每个区间的总和。

const getIntervalsSum = (orders) =>
    {
       var threeDaysSum = 0;
       var sevenDaysSum = 0;
       var thirtyDaysSum = 0;
       var ninetyDaysSum = 0;
       
       for(var i=0; i<orders.length;i++)
       {
           //check interval with moment() here and add to respective sums
       }

    };

【问题讨论】:

  • 您可以使用 subtract 功能获取 x 天后的日期,然后使用 isAfter 检查今天是否在之后
  • 帮助我们帮助你 - 分享一些示例输入和你想要得到的结果

标签: javascript


【解决方案1】:

试试这个,可能有用

const getIntervalsSum = (orders) =>
    {
       var threeDaysSum = 0;
       var sevenDaysSum = 0;
       var thirtyDaysSum = 0;
       var ninetyDaysSum = 0;
       let  today= moment()
       for(var i=0; i<orders.length;i++)
       {
        let order_create_date = moment(orders[i].create_date);
        let dif= order_create_date.diff(today, 'days') 
        // differnce between today and ordered date
        if(dif<=3) threeDaysSum += orders[i].total_amount;
        if(dif<=7) sevenDaysSum += orders[i].total_amount;
        if(dif<=30) thirtyDaysSum += orders[i].total_amount;
        if(dif<=90) ninthDaysSum += orders[i].total_amount;
       }

    };

【讨论】:

    【解决方案2】:

    我认为一个通用函数最适合这种情况。之前没有使用过,但根据文档,这看起来会起作用。

    const totalOrders = (orders, daysAgo) => {
        let sum = 0;
        const then = moment().subtract(daysAgo, 'days');
    
        orders.forEach((order) => {
            if (moment(order.created_at).isAfter(then)) {
                sum += order.total;
            }
        });
    
        return sum;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 2019-07-22
      • 1970-01-01
      • 2013-09-08
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多