云函数设置时区无效, 8点前的数据在dayOfYear中还是归在昨天,
函数里设置 process.env.Tz ='Asia/Shanghai'也没用
什么原因?应该怎么处理
const db = cloud.database()
const _ = db.command
const $ = _.aggregate
const coll_car = db.collection("car")
coll_car.aggregate()
.match(_.expr(
$.and([
$.eq([$.month('$startDateTime'), month]),
$.eq([$.year('$startDateTime'), year]),
])
))
.group({
_id: $.dayOfYear("$startDateTime"),
num: $.sum(1)
})
.end()
.then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
曲线救国了,在聚合操作中把时间加上8小时。这里又改回时间戳了:startTime为时间戳
$.add()可以计算时间,第一个参数为date时,返回date。
坑1:本地云查询中,聚合操作中new Date()会报错!而云函数不会!
坑2:本地$.toDate()函数可以使用!而云环境不行!
MongoDB4.0才支持toDate。本地的sdk不知道什么鬼
coll_car.aggregate() .project({ //不支持toDate // startDateTime: $.add([$.toDate('$startTime'), 28800000]), startDateTime: $.add([new Date(28800000), "$startTime"]) }) .match(_.expr( $.and([ $.eq([$.month('$startDateTime'), month]), $.eq([$.year('$startDateTime'), year]), ]) )) .group({ _id: $.dayOfYear("$startDateTime"), num: $.sum(1) }) .sort({ _id: 1 }) .end()
你好,可参考这里来处理下https://docs.cloudbase.net/cloud-function/timezone.html
可能和云函数的版本有关,我新创建的云函数就可以 使用Tz ='Asia/Shanghai',正常。
coll_car.aggregate()
.match(_.expr(
$.and([
$.eq([$.month('$createTime'), 3]),
$.eq([$.year('$createTime'), 2021])
])
))
.group({
_id: $.dayOfYear("$createTime"),
num: $.sum(1)
})
.sort({
_id: 1
})
.end()