片刻JS一周的数字

时间:2016-01-15 17:09:49

标签: mongodb date momentjs

我想在MomentJS中将MongoDB记录分成日期范围。

在Mongo中,每条记录的格式为IsoDate

"date": {
    "$date": "2015-06-26T13:02:12.121Z"
},

我的查询返回周和年:

    var query = Order.aggregate(
        [
            {
                $project:
                {
                    week:
                    {
                        $week: '$date'
                    },
                    year:
                    {
                        $year: '$date'
                    },
                    dayOfWeek: {
                        $dayOfWeek:
                            [
                                '$date'
                            ]

                    }
                }
            },
            {
                $group:
                {
                    _id: null,
                    distinctDate:
                    {
                        $addToSet:
                        {
                            year: '$year',
                            week: '$week'
                        }
                    }
                }
            }
        ]
    );

它给出了周和年的输出:

week: 50
year: 2015

在前端,我在星期一开始我的星期,在星期日结束:

var monday = moment().day("Monday").isoWeek(weekNum).year(year).format('MM-DD-YYYY');
var sunday = moment().day("Sunday").isoWeek(weekNum).year(year).format('MM-DD-YYYY');

输出结果为:

12-26-2015 to 01-01-2015
12-19-2015 to 12-25-2015
12-12-2015 to 12-18-2015

在Moment处理新的一年时会出现问题:

console.log('WeekNum',weekNum,星期一,星期日,年):

 WeekNum 0 12-28-2016 01-03-2016

如果在星期一开始我的一周,2016年的week num 0应该从2016年1月4日开始,对吧?因此,2015年的周数52将包含2015年12月和2016年1月的记录。

我无法弄清楚如何保持全年的周数一致。

输出应为:

12-26-2015 to 01-01-2016
12-19-2015 to 12-25-2015
12-12-2015 to 12-18-2015

我认为通过获取每条记录的ISOdate,然后只需添加7天来捕获它可能会更好吗?这是一周的范围?

var start_of_week = moment().dayOfYear(dayOfYear).year(year).format('MM-DD-YYYY');
var end_of_week = moment().dayOfYear(dayOfYear).year(year).add('days', 7).format('MM-DD-YYYY');

但这有时会产生意想不到的结果。我得到重叠的周范围:

01-01-2016 to 01-08-2016
12-29-2015 to 01-05-2016
12-27-2015 to 01-03-2016
12-26-2015 to 01-02-2016

1 个答案:

答案 0 :(得分:1)

$week的MongoDB概念符合" ISO周"的概念。在Moment.js中使用的。如果可以,请升级到至少版本MongoDB 3.4并开始使用$isoWeek,这将使用ISO周的标准概念。

否则,你必须制作"周"的Moment.js概念。通过定义Moment.js的自定义区域设置来匹配Mongo,其中"周开始于星期日,第1周从一年的第一个星期日开始。"