错误的时区nodejs mongoose

时间:2016-11-08 23:50:24

标签: javascript node.js mongodb datetime mongoose

当我尝试使用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()”我在数据库中得到了正确的时区它出错了,所以我认为问题在于mongoose中的Date类型,因为它以UTC时间保存,但我希望在当地时间

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

You can do like this:

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

By this way you can set UTChours for "America/Belem".

For example America/Belem has UTC hours +5 then u can do

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