//此处两个时间戳转化为时间是 2022-01-01 00:00:00 2022-12-31 23:59:59
match.createTime = _.and(_.gte(1640966400000), _.lte(1672502399000))
const result = await collection
.aggregate()
.match(match)
.project({
year: $.dateToString({
format: '%Y-%m',
date: $.add([new Date(0), '$createTime']),
}),
})
.group({
_id: `$year`,
value: $.sum(1),
})
.sort({
_id: -1,
})
.limit(35)
.end()
此处返回的应该是从2022年一月开始到年末按照月份统计的数据 但是在返回体中却出现了2021年12月的统计数值
{
"requestId": "183bb7768df_2",
"data": [
{
"_id": "2022-10",
"value": 861
},
{
"_id": "2022-09",
"value": 3182
},
{
"_id": "2022-08",
"value": 3107
},
{
"_id": "2022-07",
"value": 3111
},
{
"_id": "2022-06",
"value": 2804
},
{
"_id": "2022-05",
"value": 2891
},
{
"_id": "2022-04",
"value": 2331
},
{
"_id": "2022-03",
"value": 2611
},
{
"_id": "2022-02",
"value": 3456
},
{
"_id": "2022-01",
"value": 4394
},
{
"_id": "2021-12",
"value": 15
}
]
}
时间戳没有时区的概念的。但是云函数里面使用new Date()获取时间对象的话,默认是获取到时区为0的。所以解决方法有两种,二选一。
1、云函数高级设置里,设置时区为东八区。
2、时间戳里加上8小时的毫秒数后再传入new Date()里。
你这个是不是东八区的时间,数据库可能存的UTC时间有八个小时的时差。
试试这个区间呢