Node + Mongodb + ISODate +时区问题

时间:2016-09-12 08:14:37

标签: javascript node.js mongodb utc isodate

您好我正在使用节点js + mongodb。

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

我想插入日期字段应该以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对象的形式返回当前日期。 mongo shell 使用ISODate帮助程序包装Date对象。 ISODate在 UTC。

2 个答案:

答案 0 :(得分:0)

如果您直接插入或更新日期,那么您将存储时间戳。当您从UTC format查询时,它仍会以Node.js的形式存储,甚至会以UTC格式返回。

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

答案 1 :(得分:0)

是的,正如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" (即新的Date())在MongoDB中保留日期。虽然我在GMT + 1上,但日期以UTC格式存储。

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