收藏
回答

云开发通过时间戳按月统计时出现的奇怪问题?

//此处两个时间戳转化为时间是 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
        }
    ]
}
回答关注问题邀请回答
收藏

2 个回答

  • SuperYang
    SuperYang
    2022-10-09

    时间戳没有时区的概念的。但是云函数里面使用new Date()获取时间对象的话,默认是获取到时区为0的。所以解决方法有两种,二选一。

    1、云函数高级设置里,设置时区为东八区。

    2、时间戳里加上8小时的毫秒数后再传入new Date()里。


    2022-10-09
    有用
    回复
  • ⅴ
    2022-10-09

    你这个是不是东八区的时间,数据库可能存的UTC时间有八个小时的时差。

    试试这个区间呢

    2022-01-01 08:00:00  2023-01-01 07:59:59
    


    2022-10-09
    有用
    回复 4
    • 少年锦时
      少年锦时
      2022-10-09
      云开发存储数据库应该不会有这个时差吧
      2022-10-09
      回复
    • ⅴ
      2022-10-09回复少年锦时
      看现象就怀疑是时区问题,你能看到数据库吧,看一下存的是GMT还是UTC。或者看一下2021-12具体是哪几条数据被查到了。
      2022-10-09
      回复
    • 少年锦时
      少年锦时
      2022-10-09
      存的时间戳格式的
      2022-10-09
      回复
    • ⅴ
      2022-10-09回复少年锦时
      看了一下默认应该是GMT吧,不知道你有没有改。这个1640966400000是UTC的。
      2022-10-09
      回复
登录 后发表内容