节点+ Mongodb + ISODate +时区问题

Node + Mongodb + ISODate + Timezone issue

本文关键字:问题 时区 Mongodb 节点 ISODate      更新时间:2023-09-26

你好,我在node js + mongodb工作。

当我将数据插入集合时,数据被默认保存为ISODate。ISODate (2016 - 06 - 17 t13: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参考从文档:

  1. Date()在mongo shell中以字符串形式返回当前日期。
  2. new Date()返回当前日期作为Date对象。芒果壳用ISODate帮助器包装Date对象。输入了ISODateUTC。

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

Date对象:-

您可以使用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"(即新的日期())在MongoDB中持久化的日期。虽然我使用的是GMT+1,但日期是用UTC存储的。

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

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

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