【问题标题】:Adding Dates in Javascript在 Javascript 中添加日期
【发布时间】:2022-01-06 04:43:07
【问题描述】:

我对 javascript 很陌生,我正在为我正在开发的电子商务网站创建一个仪表板。我正在尝试显示从第一个订单日期开始的所有日期的数据。 MongoDB 当然只显示订单日期的数据,所以我正在尝试使用 javascript 将缺失的日期添加到我的 MongoDB 数据中。我在执行此操作时遇到了一些问题,我非常感谢任何有关如何使其工作的建议或帮助。

谢谢!

OrderRouter.js

import express from 'express';
import expressAsyncHandler from 'express-async-handler';
import Order from '../models/orderModel.js';
import User from '../models/userModel.js';
import Product from '../models/productModel.js';

orderRouter.get(
  '/summary',
  isAuth,
  isAdmin,
  expressAsyncHandler(async (req, res) => {
 const dailySales = await Order.aggregate([
      {
        $group: {
          _id: { $dateToString: { format: '%m-%d-%Y', date: '$createdAt' } },
          orders: { $sum: 1 },
          sales: { $sum: '$totalPrice' },
        },
      },
      { $sort: { _id: 1 } },
    ]);

    const datesArray = getDates(startDate, endDate)
     for(date in datesArray){
      isInArray = true;
      for (day in dailySales){
        if (day._id === date){
          isInArray = true;
        }
    
      }
     if (isInArray = false){
        dailySales.push({ "_id":"date", "orders":0, "sales":0}) 
      }
    }

res.send({dailySales });
  })
);

【问题讨论】:

    标签: javascript reactjs mongodb


    【解决方案1】:

    我不确定你是怎么写的 getDates,但是使用日期对象会容易得多,如下所示:

    const finalResults = [];
    const ONE_DAY = 1000 * 60 * 60 * 24;
    
    if (dailySales.length) {
        let currDate = new Date(dailySales[0]._id);
        const endDate = new Date(dailySales[dailySales.length - 1]._id);
        while (currDate <= endDate) {
    
            if (currDate.getTime() === new Date(dailySales[0]._id).getTime()) {
                finalResults.push(dailySales[0])
                dailySales.shift();
            } else {
                const day = currDate.getUTCDate();
                const month = currDate.getMonth();
                finalResults.push({
                    _id: `${month < 10 ? "0" : ''}${month}-${day < 10 ? '0' : ''}${day}-${currDate.getFullYear()}`,
                    orders: 0,
                    sales: 0
                })
            }
            currDate = new Date(currDate.getTime() + ONE_DAY)
        }
    }
    

    现在我们每天都在迭代,如果它存在,我们就添加现有的 obj,如果不存在,我们生成一个新文档并继续循环。

    【讨论】:

    • @Tom_Slabbaert 谢谢你的回答。我尝试将其包含在我的代码中,但没有任何改变。您知道为什么会发生这种情况吗?
    猜你喜欢
    • 2023-03-25
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多