【问题标题】:Node + Mongodb + ISODate + Timezone issueNode + Mongodb + ISODate + Timezone 问题
【发布时间】:2016-09-12 08:14:37
【问题描述】:

您好,我在 node js + mongodb 中工作。

当我将数据插入集合时,数据存储默认 ISODate,例如。 ISODate("2016-06-17T13:00:21.665Z")

我要插入的日期字段应该以 UTC 格式存储。

它已经以 UTC 格式存储或需要更改代码中的任何内容?

请任何人推荐我。

我的代码:

var query = {};
query.created_by = 'admin';
query.created_on = new Date();
var collection = mongoUtil.list;
collection.insert(query, function(err, item) {
    if (!err && item) {
        console.log("success");
    } else {
        console.log("error");
    }

});

Mongo 插入数据:

{ "created_by" : "admin", "created_on" : ISODate("2016-06-17T13:00:21.665Z") }

我检查了参考 - Mongo UTC Refference 来自文档:

  1. Date() 在 mongo shell 中以字符串形式返回当前日期。
  2. new Date() 以 Date 对象的形式返回当前日期。蒙哥壳 用 ISODate 助手包装 Date 对象。 ISODate 在 UTC。

【问题讨论】:

  • 你在 node.js 中得到什么格式?
  • 请告诉我,如何检查?
  • 它以 UTC 格式存储在您的数据存储中。如果你想在 node.js 中格式化日期,你可以使用moments plugin

标签: javascript node.js mongodb utc isodate


【解决方案1】:

是的,正如 abdulbarik 的回答中提到的,MongoDB 确实将日期保存在 UTC 中。

日期对象:-

您可以使用 getTimezoneOffset() 方法来获取 UTC 和本地时间之间的差异。

  var d = new Date()
  var n = d.getTimezoneOffset();

  console.log('date obj ==>' + d);
  console.log('time zone obj ==>' + n);

控制台日志:-

你可以看到时区 obj 有“-60”。我在 GMT+1

date obj ==>Mon Sep 12 2016 10:17:28 GMT+0100 (GMT Daylight Time)
time zone obj ==>-60

MongoDB 已将日期保留为 UTC:-

我使用对象“d”(即 new Date())将日期保存在 MongoDB 中。虽然我在 GMT+1,但日期以 UTC 格式存储。

 "timestamp" : ISODate("2016-09-12T09:17:28.193Z"),

【讨论】:

  • 对我来说,它现在也存储格式如 (2015-12-15T06:15:05.966Z)
  • 所以如果我想选择基于 timezome 的查询或者我们需要在前端处理?
【解决方案2】:

如果您直接插入或更新日期,那么您将存储一个时间戳。当您从 Node.js 查询时,即使它以 UTC 格式返回,它仍将存储为 UTC format

但您可能想也可能不想相信时间是正确的。因此,您可以创建或使用任何方法来确保 UTC 格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 2019-09-08
    • 2017-05-21
    • 2017-04-17
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多