【问题标题】:Wrong timezone nodejs mongoose错误的时区nodejs猫鼬
【发布时间】:2016-11-08 23:50:23
【问题描述】:

当我尝试使用 mongoose 在 mongodb 中存储内容时遇到时区问题。

我创建了这样的架构:

var userSchema = new mongoose.Schema({
    name: {
        type: String
    },
    created_at: {
        type: Date
    }
});

在我的代码中查找日期范围($gte 和 $lte)中的用户很重要。

创建用户时出现问题:

user.created_at = new Date();

在我的数据库中,这个用户是用错误的时区创建的。

我曾尝试使用“moment-timezone.js”,例如:

user.created_at = moment().tz("America/Belem").format();

时区的问题在 mongodb 中仍然相同,但是当我在控制台登录“moment().tz("America/Belem").format()”时,我在数据库中获得了正确的时区,但它出错了,所以我认为问题在于猫鼬中的 Date 类型,因为它节省了 UTC 时间,但我想要在本地时间。

我尝试在架构中使用 String 类型而不是 Date 类型,并且我使用“moment-timezone.js”获得了正确的时区,但我对 $gte 和 $lte 的查询以查找用户不再起作用.

在此讨论中here 问题是相同的,但他们说将服务器时区更改为 UTC,但他们没有展示如何做到这一点。我尝试this 更改服务器时区,但它对我不起作用(我使用的是 Windows 10),我认为这不是正确的路径。

请帮我解决这个问题。告诉我解决这个问题的最佳方法。

谢谢。

【问题讨论】:

  • 请看这个。您应该始终尝试以 UTC 格式存储时间。 stackoverflow.com/a/40425115/2683814
  • 首先感谢您的回复。我尝试了您的解决方案,但没有奏效。 :'(
  • 您在数据库中看到了什么?现在日期如何存储?
  • 我遇到了和以前一样的时区问题。没有任何改变。
  • Date 在 MongoDB 中始终使用 UTC,老实说,无论您当前的想法如何,您都应该使用它。 :)

标签: javascript node.js mongodb datetime mongoose


【解决方案1】:

你可以这样做:

var d = new Date();
d.setUTCHours(0, 0, 0, 0); // hour,minute,seconds,milliseconds
user.created_at=d;

通过这种方式,您可以为“America/Belem”设置 UTChours。

例如美国/贝伦有 UTC 小时 +5 那么你可以做

d.setUTCHours(5, 0, 0, 0); 

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2020-09-18
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多