2016-11-08 57 views
0

当我尝试使用猫鼬在mongodb中存储某些东西时,我遇到了一个时区问题。错误的时区nodejs mongoose

我创造了这样一个模式:

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中是相同的,但是当我控制台日志中的问题。 “那一刻()TZ(” 美洲/贝伦“)。 format()“我在数据库中获得了正确的时区,但它出错了,所以我认为问题是使用mongoose键入Date,,因为它节省了UTC时间,但我想在当地时间

我试图使用类型字符串,而不是类型日期在我的架构,我得到了正确的时区与“时间timezone.js”,但我的查询$ gte和$ lte找到用户没有工作了。

在这个讨论中here问题是一样的,但他们说服务器时区更改为UTC,但他们没有说明如何去做。我试图this来改变服务器的时区,但它不适用于我(我使用的是Windows 10),我认为这不是正确的道路。

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

谢谢。

+0

请看看这个。您应该始终尝试使用UTC存储时间。 http://stackoverflow.com/a/40425115/2683814 – Veeram

+0

首先感谢您的回复。我试过你的解决方案,但没有奏效。 :'( –

+0

你在db中看到了什么?现在的日期如何存储? – Veeram

回答

0

你可以这样做:

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

通过这种方式,您可以为 “美国/贝伦” 设置UTChours。

例如美洲/贝伦有UTC小时+5那么在哪里做

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