Mongoose或MongoDB从日期起24小时内移除?
我一定是做错了什么,但我不知道是什么。我目前在应用程序中有一个日期字段,其值格式为MMMM,D yyy 在本例中,我将使用2018年10月1日的日期 在应用程序中,用户选择2018年10月1日,登录为Mongoose或MongoDB从日期起24小时内移除?,mongodb,date,mongoose,Mongodb,Date,Mongoose,我一定是做错了什么,但我不知道是什么。我目前在应用程序中有一个日期字段,其值格式为MMMM,D yyy 在本例中,我将使用2018年10月1日的日期 在应用程序中,用户选择2018年10月1日,登录为 2018年10月1日 稍后,我使用var docDate=new date($(“#insuranceExpiration').val()).toISOString()将此日期转换为可保存日期哪些日志作为 2018-10-01T04:00:00.000Z 然后我将其添加到一个对象中,将其字符串化并
2018年10月1日
稍后,我使用var docDate=new date($(“#insuranceExpiration').val()).toISOString()将此日期转换为可保存日期代码>哪些日志作为
2018-10-01T04:00:00.000Z
然后我将其添加到一个对象中,将其字符串化并发送到服务器,在服务器上记录日期并显示为
2018-10-01T04:00:00.000Z
然后我使用Mongoose将这个日期保存到MongoDB,但是当我看到保存的日期时,我会显示出来
2018-09-30T04:00:00.000Z
我一辈子都搞不懂为什么我会在过去24小时内看到我选择的日期。下面是猫鼬的代码,看看我在这方面是否做错了什么
app.post('/api/myDocuments/insuranceGeneral', function(req, res ) {
console.log(req.body.expires);
// prints 2018-10-01T04:00:00.000Z
InsuranceGeneral.findOneAndUpdate({
_id: req.rsaConPortal.id
}, {
$set: {
"documents.insurance.name": req.body.name,
"documents.insurance.expires": req.body.expires,
"documents.insurance.url": req.body.url,
"documents.insurance.uploadDate": req.body.uploadDate
}
}, function(err, doc) {
if (err) throw err;
res.send('Success');
});
});
即使我使用标准的javascript日期对象,我也可以将其打印在浏览日志上
2018年10月1日星期一00:00:00 GMT-0400(东部夏时制)
就在猫鼬之前,这个印在服务器上
2018-10-01T04:00:00.000Z
但这是mongodb的最终结果
2018-09-30T04:00:00.000Z
我认为您和您的服务器在不同的时区。mongodb使用GMT
。如果您没有在iso日期中声明时间,它会将时间设置为00:00.000Z
。因此,对于GMT
来说,这是提前了一天。您只需将日期转换为GMT
,您可以使用或通过从日期减去偏移量来解决问题,如下所示:
var offset = new Date().getTimezoneOffset() * 60000;
var date = new Date(new Date($('#insuranceExpiration').val())) - offset).toISOString();
或者使用moment.js
var date = moment($('#insuranceExpiration').val()).tz('GMT').format('YYYY-MM-DD');
谢谢你投了两张反对票,但没有评论。我显然不知道这个问题是什么。如果你需要更多的信息,我很乐意提供。这两种方法我都不能用。对于您提供的第一个选项,我得到一个错误Uncaught RangeError:Invalid time value
,对于第二个选项,我得到以下错误矩时区没有GMT数据。
当我将第一个选项分成两行时var date=new date($(“#保险到期”).val()-offset)代码>和var新日期(Date).toISOString()
I return1969-12-31T20:00:00.000Z
I编辑了第一个选项,我遗漏了一个父项,因此它应该是var date=new date(new date($(“#保险到期”).val())-offset).toISOString()代码>谢谢你,Efe。这最终成为我这方面的一个代码错误。我的代码本来是可以工作的,但是被保存到了错误的位置,这使得它看起来好像保存了错误的信息,而实际上根本没有保存任何东西。