Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb 如何将日期转换为时刻_Mongodb_Momentjs - Fatal编程技术网

Mongodb 如何将日期转换为时刻

Mongodb 如何将日期转换为时刻,mongodb,momentjs,Mongodb,Momentjs,我正在尝试转换存储在db(mongo)中的日期(时刻),然后与当前日期进行比较以获得差异。但是,当我从db中检索过去的日期并使用当前时刻时,我不能使用diff()。在db insert中,我正在插入{startDate:moment(),…}。然后,在我检索了startDatedate之后,我尝试获取diff var now = moment(); console.log(now.diff(startDate)) 但是它抛出了一个错误 我存储的是时刻而不是js日期对象,但我仍然得到了错误,因此

我正在尝试转换存储在db(mongo)中的日期(时刻),然后与当前日期进行比较以获得差异。但是,当我从db中检索过去的日期并使用当前时刻时,我不能使用
diff()。在db insert中,我正在插入
{startDate:moment(),…}
。然后,在我检索了
startDate
date之后,我尝试获取diff

var now = moment();
console.log(now.diff(startDate))
但是它抛出了一个错误


我存储的是
时刻
而不是js
日期
对象,但我仍然得到了错误,因此我不确定如何实际获得存储值的差异,并将其与当前时刻进行比较。

如果插入
开始日期:时刻()
,将保存
时刻
对象的内容。。不是您期望的
日期
字段

例如,在
mongo
shell中:

> db.mycollection.insert({startDate:moment()})
WriteResult({ "nInserted" : 1 })

> db.mycollection.findOne()
{
    "_id" : ObjectId("5401a7805a5b0e4e0bfe5170"),
    "startDate" : {
        "_isAMomentObject" : true,
        "_i" : null,
        "_f" : null,
        "_l" : null,
        "_strict" : null,
        "_isUTC" : false,
        "_pf" : {
            "empty" : false,
            "unusedTokens" : [ ],
            "unusedInput" : [ ],
            "overflow" : -2,
            "charsLeftOver" : 0,
            "nullInput" : false,
            "invalidMonth" : null,
            "invalidFormat" : false,
            "userInvalidated" : false,
            "iso" : false
        },
        "_d" : ISODate("2014-08-30T10:29:20.529Z")
    }
}
startDate.\u d
字段中保存了一个适当的
Date
,但我认为您实际需要做的是使用
new Date()
构造函数在
startDate
字段中保存一个值:

>  db.mycollection.insert({startDate:new Date()})
WriteResult({ "nInserted" : 1 })

> doc = db.mycollection.findOne()
{
    "_id" : ObjectId("5401a8fe5a5b0e4e0bfe5173"),
    "startDate" : ISODate("2014-08-30T10:35:42.736Z")
}
现在,您应该能够按预期执行日期计算:

> var now = moment();

// Diff in milliseconds (http://momentjs.com/docs/#/displaying/difference/)
> now.diff(doc.startDate)
6825

您可以直接将日期对象传递给moment.js构造函数

var my_date = new Date()
moment(my_date) 

您应该使用moment的
.toDate()
函数,而不是试图从一个时刻构造一个日期。或者不使用insert,直接调用
new Date()
而不使用参数。您不应该使用
\u d
属性,这是正确的。它不是moment的公共API的一部分。为了澄清问题,我还尝试使用var date=moment().format('MMMM Do yyy,h:mm:ss a');然后将其存储到数据库中,但当我使用now=moment()格式进行diff时,它不起作用('mmmmdoyyy,h:mm:ssa')。但是,存储newDate(矩()和矩().toDate()确实有效。Thanks@MattJohnson:同意,简单的
新日期()。我想矩()调用可能还有其他选项(例如,如果使用时区或其他相对日期便利),但这不是一个很好的例子:)。