Javascript momentjs将UTC从字符串转换为Date Object

时间:2014-11-11 21:34:09

标签: node.js mongodb momentjs

民间,   在moment.js文档中遇到困难。

record.lastModified = moment.utc().format();

返回:

2014-11-11T21:29:05+00:00

哪个好,它在UTC中......当我将它存储在Mongo中时,它会被存储为String,而不是Date对象类型,这就是我想要的。

我需要的是:

"lastModified" : ISODate("2014-11-11T15:26:42.965-0500")

但我需要它是一个原生的 javascript对象类型,并将其存储在Mongo中。现在,如果我存储上述内容,它将以字符串形式输入,而不是Date对象类型。

我用moment.js尝试了几乎所有的东西。他们的toDate()函数有效,但可以回到我当地的时区,而不是给我utc。

谢谢!

2 个答案:

答案 0 :(得分:3)

保存Javascript Date对象会导致ISODate存储在Mongo中。

将ISO日期保存为Javascript String将导致String存储在Mongo中。

所以,这就是你想要的:record.lastModified = new Date(moment().format());

答案 1 :(得分:1)

不是理想的解决方案,但是通过monogo shell手动将其转换为ISODate对象,我获得了相同的结果。我们需要使用ISODate进行比较/查询来聚合结果,因此我们在运行聚合脚本之前运行此脚本。

使用moment()。format()。

插入本地时间字符串
"createdDt" : "2015-01-07T17:07:43-05:00"`

使用以下命令转换为ISODate(UTC):

    var cursor = db.collection.find({createdDt : {$exists : true}});
    while (cursor.hasNext()){
        var doc = cursor.next();
        db.collection.update(
                   {_id : doc._id}, 
                   {$set: {createdDt : new ISODate(doc.createdDt)}})
    }

结果

"createdDt" : ISODate("2015-01-07T22:07:43Z")"

请注意转换时间 T17:07:43-05:00T22:07:43Z

我找不到任何直接从JavaScript插入BSON ISODate格式(默认为UTC)的解决方案,插入新文档时,似乎可以通过pyMongo& amp;但是C#/ Java驱动程序。试图寻找可维护的解决方案