【问题标题】:Javascript momentjs convert UTC from string to Date ObjectJavascript momentjs 将 UTC 从字符串转换为日期对象
【发布时间】:2015-01-08 14:21:12
【问题描述】:

各位, 处理 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")

但我需要它是 native javascript 对象类型,并将其存储在 Mongo 中。现在,如果我存储上述内容,它将作为字符串输入,而不是 Date 对象类型。

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

谢谢!

【问题讨论】:

  • 你提到的toDate()函数就是你想要的。 JavaScript Date 对象始终在内部以 UTC 表示它们的时间。您可以编辑您的问题,详细说明您认为这不起作用的原因吗?
  • 试试new Date(moment.utc().format());
  • 我也有同样的问题,已经在这几个小时了

标签: node.js mongodb momentjs


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    不是一个理想的解决方案,但我通过 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:00 到 T22:07:43Z

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 2021-04-19
      • 2016-02-28
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2012-03-15
      相关资源
      最近更新 更多