Mongoose .find以错误的格式给我日期

时间:2015-08-27 14:35:51

标签: node.js mongodb date mongoose momentjs

所以在MongoDB上我有一个Date对象存储如下:

.find()

所以MongoDB上的日期是正确的。然后,我使用Mongoose Message.find({}).sort({ "created_at" : -1 }) .limit(1) .exec(function(error, result) { if(error) callback(error); var date = moment(result.created_at); console.log(date); console.log(result); callback(null, result); }); 来获取该数据库中的“最新”消息,如下所示:

result

因此,当我将created_at: Thu Aug 27 2015 21:50:49 GMT+0800 (CST)记录到控制台(即消息本身)时,它会向我显示时间:

moment(result.created_at)

时间是正确的,但我不希望收到GMT日期,因为它明确地存储在MongoDB上作为UTC。在此特定示例中,{ [Number: 1440685886247] _isAMomentObject: true, _isUTC: false, _locale: { _ordinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: [Function], _abbr: 'en', _ordinalParseLenient: /\d{1,2}(th|st|nd|rd)|\d{1,2}/ }, _d: Thu Aug 27 2015 22:31:26 GMT+0800 (CST) } 将日期打印到控制台,如下所示:

date

不知何故,这实际上是根据我的笔记本电脑打印当前时间。当使用MongoDB中的日期将moment()声明为result.created_at时,我不知道为什么会这样做。

那么有谁知道如何成功使用我的数据库中的日期?将消息打印到控制台时,我将其打印为GMT,当使用时我似乎正在打印笔记本电脑的时间。

谢谢!

更新

到目前为止,我尝试从数据库中取出var date = Date(result.created_at) // Prints current time on laptop var date = new Date(result.created_at) // Prints undefined var date = result.created_at // Prints undefined var date = moment(result.created_at) // Prints moment object with the time as computer's time 并使用以下方法将其输出到控制台:

tapply(example$value, example$group, function(x) {length(x[!is.na(x)])})

我有点卡住了。我想将这个日期对象用于另一个函数,但只能让它来保存计算机的时间。

1 个答案:

答案 0 :(得分:1)

您遇到的主要问题是find,回调的result参数是一个数组,即使您已将结果限制为1个doc。

因此,要访问一个doc created_at属性,它将是:

result[0].created_at

然后,要以UTC格式获取其包含的日期和时间的字符串版本,请在其上调用toUTCString()

result[0].created_at.toUTCString()