mongodb - Moment JS 一年中的周数

标签 mongodb date momentjs

我正在尝试将 MongoDB 记录分成 MomentJS 中的日期范围。

在 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, monday, sunday, year):

 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

最佳答案

$week 的 MongoDB 概念与 Moment.js 中使用的“ISO week”概念相匹配。如果可以,至少升级到 MongoDB 3.4 版本并开始使用 $isoWeek,它将使用 ISO 周的标准概念。

否则,您必须通过为 Moment.js 定义自定义语言环境来使 Moment.js 的“周”概念与 Mongo 匹配,其中“周从星期日开始,第 1 周从一年中的第一个星期日开始”

关于mongodb - Moment JS 一年中的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816284/

相关文章:

python - 使用 PTVS、IronPython 和 MongoDB

mongodb跨多个文档平均数组

mongodb - 我应该在产品环境中使用 "allowDiskUse"选项吗?

mysql SELECT * WHERE 日期 + 7 天 >= $今天

javascript - 如何使用 moment.js 从日期列表中获取最小或最大日期?

javascript - Momentjs isDST 函数不返回正确的结果

python - Mongoengine:ConnectionError:您尚未定义默认连接

Shell:Sed -i.bak 通过附加当前日期来重命名文件

php - 在 PHP 5.2.6 中获取月份的第一天?

javascript - Moment.js 增加了 5 年