Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongoose或MongoDB从日期起24小时内移除?_Mongodb_Date_Mongoose - Fatal编程技术网

Mongoose或MongoDB从日期起24小时内移除?

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 然后我将其添加到一个对象中,将其字符串化并

我一定是做错了什么,但我不知道是什么。我目前在应用程序中有一个日期字段,其值格式为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-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 return
1969-12-31T20:00:00.000Z
I编辑了第一个选项,我遗漏了一个父项,因此它应该是
var date=new date(new date($(“#保险到期”).val())-offset).toISOString()谢谢你,Efe。这最终成为我这方面的一个代码错误。我的代码本来是可以工作的,但是被保存到了错误的位置,这使得它看起来好像保存了错误的信息,而实际上根本没有保存任何东西。