Mongoose时间戳返回错误的日期

问题描述 投票:0回答:2

我正在创建一个node.js REST api,它使用Mongoose从MongoDB读取数据,但是时间戳年份是用1970读取的

我的模特

last_updated: {
    type: Date,
  }

我的控制器

exports.listAllGlobalData = function(req, res) {
 GlobalData.find({}).exec((err, data) => {
  console.log(data)
    if (err) return next(err);
    res.json(data);
   });
};

我在mongodb的数据:

last_updated : 1516538665

和json结果:

"last_updated": "1970-01-18T13:11:47.064Z"

所以时间似乎是正确的,但不知何故,日期不是应该是2018年。数据是只读的。

node.js mongodb mongoose
2个回答
1
投票

尝试将Date.now设置为默认值:

last_updated: {
        type: Date,
        default: Date.now
      }

来自Mongoose文档:“Date.now()返回当前的unix时间戳作为数字。”


1
投票

所以问题毕竟是时间戳格式,以秒为单位,而Date(mongoose使用)则以毫秒为单位。毕竟相当微不足道。

我最终使用了SchemaType.prototype.set on attribute with function as value,它检查了时间戳长度,如果以秒为单位将其乘以1000(更短)。

您也可以在填充模型之前执行此操作,但这样就不需要每次都执行此操作,除了将相同的键设置为typeof Date的Schema属性。它也可以用箭头功能来完成,例如:

set: v => Math.round(v)

我不知道这是否是最好的方法,也没有办法在声明属性参数Schema.Types.Date时添加此函数

此外,我不能使用钩子来saveupdate等事件,因为我不会在这个模型上调用任何这些方法

© www.soinside.com 2019 - 2024. All rights reserved.