【发布时间】: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
【问题讨论】: