为了账号安全,请及时绑定邮箱和手机立即绑定

从日期字符串计算整年

从日期字符串计算整年

慕莱坞森 2023-03-10 14:00:37
我目前在 Node 中使用猫鼬作为数据库。我有两个模型 product 和 customer 。每当客户购买产品时,当前日期就会存储在产品的SellingDate属性中。现在我想要实现的是,当我们给出一个随机日期作为输入时,它应该将它与最多一年的所有产品的所有销售日期进行比较,并返回给我们一年之间的所有日期的计数。例如,如果我们在数据库中有5 条记录,即 { “Sun Feb 25 2015”,“Fri Mar 25 2015”,“Sat Dec 25 2015”,“Mon Feb 25 2016” } 我给“Sun Feb 25, 2015”2015 年 2 月 - 2016 年 2 月.... 它应该比较字符串格式的日期,因为我以“日月日年”格式存储日期......
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

您可以进行聚合,首先使用 将日期字符串转换为日期$toDate,并使用 跟踪年份$year。然后你可以$match在给定的日期范围内的所有文件,最后$group是年份和$count:


YourModel.aggregate([

    { "$addFields": {

       "year":{ "$year": {

            "$toDate": "$date"

        }

    } }},

    {

        $match: {

            // define your range of years here, it would be 2015 - 2016 in your case

            year: {$gte: 2016, $lte: 2020}

        }

    },

    {

        $group: {

            _id: {year: "$year"}

        }

    },

     {

      $count: "totalCountPerYearRange"

    }

]);


查看完整回答
反对 回复 2023-03-10
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

只要日期字符串在数组中 - 使用 [] NOT {}(它定义了一个需要属性:值对的对象),那么您就可以将字符串转换为日期并进行简单的比较。以下将返回一个数组,您可以在其中简单地获取数组的长度以进行计数。


let myDates = [

    "Thu Jan 07 2016",

    "Tue Mar 01 2016",

    "Wed May 25 2016",

    "Sat Jun 25 2016",

    "Sun Aug 14 2016",

    "Fri Nov 18 2016",

    "Fri Jan 06 2017",

    "Sun Apr 16 2017",

    "Sun May 21 2017",

    "Sun Jul 30 2017",

    "Fri Sep 22 2017",

    "Sun Nov 12 2017",

    "Sun Dec 24 2017"

]


let firstDate = new Date("Wed May 25 2016");

let lastDate = new Date("Thu May 25 2017");


let matches = myDates.filter(d => {if (new Date(d) >= firstDate && new Date(d) <= lastDate) return d});

console.log(matches);

console.log(matches.length);


查看完整回答
反对 回复 2023-03-10
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号