【问题标题】:Moment JS week numbers in a yearMoment JS 一年中的周数
【发布时间】:2016-04-21 08:30:56
【问题描述】:

我正在尝试将 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

【问题讨论】:

    标签: mongodb date momentjs


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多