Mongoose时间戳返回错误的日期

时间:2018-01-21 17:55:46

标签: node.js mongodb mongoose

我正在创建一个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年。数据是只读的。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

毕竟,问题出在时间戳格式上,以秒为单位,而Date(猫鼬使用的)期望在毫秒内解决。毕竟是微不足道的。

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

您也可以在填充模型之前执行此操作,但是这种方式无需每次都执行,除了为typeof Date的Schema属性设置相同的键外。 也可以使用箭头功能来完成,例如:

  

set: v => Math.round(v)

我不知道这是否是最好的方法,也不知道在声明属性参数Schema.Types.Date时是否可以添加此功能

我也无法使用钩子来捕获saveupdate之类的事件,因为我没有在此模型上调用任何这些方法