我在过去的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这样的猫鼬数据类型有一个不准确的时区检查。
任何帮助都将不胜感激。
答案 0 :(得分:2)
你正在比较两件不同的事情。 moment()
在本地时区提供时间,Date.now
为UTC时间。猫鼬有这种方式的唯一原因是因为mongo db以这种方式保存它。这里不需要修复。
只需使用时刻库将获取的猫鼬日期转换回本地时区。