【问题标题】:Create a document and set the date - Mongoose创建文档并设置日期 - Mongoose
【发布时间】:2019-01-09 12:40:06
【问题描述】:

我正在尝试在 mongo 中创建一个带有日期字段的文档:日期。

当我发布到 API 时,创建的文档有我设置的不同时间,如下:

{
"serialnumber": "1234567",
"date": "2019-08-30T10:32"
}

结果:

{
    "troubles": [],
    "_id": "5c35e9c8e726822a243936a9",
    "serialnumber": "1234567",
    "date": "2019-08-30T13:32:00.000Z",
    "updated": "2019-01-09T12:32:08.996Z",
    "__v": 0
}

我的猫鼬架构:

var MeasurementSchema = new Schema({
    serialnumber: String,
    date: Date
......

如我们所见,我写了 'T10:32',但是,参数 'date' 的时间结果是 12:32。

有什么建议吗?

【问题讨论】:

  • 我不是因为时区。您必须检查所有设备上的时区设置是否相同
  • 我已经检查过了,我电脑(本地服务器)的时区是'America/DeNoronha

标签: javascript node.js mongodb date mongoose


【解决方案1】:

MongoDB 默认以 UTC 存储时间,并将任何本地时间表示形式转换为这种形式。

必须对某些未修改的本地时间值进行操作或报告的应用程序可以将时区与 UTC 时间戳一起存储,并在其应用程序逻辑中计算原始本地时间。

示例

在 MongoDB shell 中,您可以存储当前日期和当前客户端与 UTC 的偏移量。

var now = new Date();
db.data.save( { date: now,
                offset: now.getTimezoneOffset() } );

您可以通过应用保存的偏移量来重建原始本地时间:

var record = db.data.findOne();
var localNow = new Date( record.date.getTime() -  ( record.offset * 60000 ) );

【讨论】:

  • 这对我有什么帮助?
  • Moment 允许您在有或没有本地时间/UTC 时间的情况下保存日期和时间。如果需要,您可以根据需要从数据库中操作结果。
  • 明白。那么,这个问题的答案是创建一个中间件预“保存”并在那里使用时刻?
  • 是的。你是对的。您可以将日期保存到 UTC 日期时间变量中,然后将数据保存到数据库中。
  • 我试过了,但没有成功。当我保存日期时,变量返回到默认时区
猜你喜欢
  • 2014-08-08
  • 2014-07-13
  • 2011-06-17
  • 2016-02-24
  • 2020-01-01
  • 2013-03-02
  • 2015-08-12
  • 1970-01-01
  • 2023-02-11
相关资源
最近更新 更多