Mongoose Date.now时间不准确

时间:2017-01-09 11:58:37

标签: node.js mongodb mongoose momentjs

我在过去的2个小时里一直在撕扯我的头发,起初我认为Moment.js是没有回到正确时间的罪魁祸首,但是它是猫鼬Date.now一直在做一些邪恶的东西

这是代码

const moment = require('moment');
const mongoose = require('mongoose');

const item = new mongoose.Schema({
   time: { type: Date, default: Date.now },
   time2: { type: Date }
});

如你所见,我有两个字段,一个是mongoose的默认日期,另一个是存储日期的字段。

item.pre('save', function() {
   console.log(moment()); // Showing a correct date and time
   console.log(this.time); // Showing a correct date but false time
   this.time2 = moment(); // When it is saved to the database, it will show a correct date but false time

});

结果是

moment("2017-01-09T19:42:48.896") // the first console.log. This is correct, the time is correct
2017-01-09T11:42:48.884Z // Second console.log. The date is correct but the time is FALSE

我想如果我这样做,一切都会得到解决

const item = new mongoose.Schema({
       time: { type: Date, default: moment() },
       time2: { type: Date, default: Date.now }
 });

但是你知道第一个字段time的console.log是什么?

2017-01-09T11:42:48.884Z // it is this time which is WRONG TIME

我的猜测是,像Date这样的猫鼬数据类型有一个不准确的时区检查。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

你正在比较两件不同的事情。 moment()在本地时区提供时间,Date.now为UTC时间。猫鼬有这种方式的唯一原因是因为mongo db以这种方式保存它。这里不需要修复。

只需使用时刻库​​将获取的猫鼬日期转换回本地时区。