2013-07-31 80 views
6

我在node.js中使用Sequelize来保存打开和关闭时间。我也使用了moment.js格式。改变FindOrCreate我这样做:UTC日期在Sequelize.js

result.open = moment(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss"); 
result.save() 
... 

能正常工作的时间被格式化MySQL的日期时间格式。问题是当我检索Seqquelize认为它是UTC时间并将其转换为EST(我的服务器时区)时。

我更喜欢它以UTC的方式进入数据库,并以相同的方式出现。有什么我做错了吗?为什么Sequelize不会在插入时将其转换为UTC,而是假定它是UTC出来的?另外,有没有办法让它尝试转换到我的服务器时区?

+0

你有没有找到解决办法?我遇到同样的问题,我无法找到任何文件。 –

+0

@JeffRyan我不知道我的答案是否太晚,但我希望它能解决你的问题,如果你仍然有它(我希望不是!)=) – Abdo

回答

0

我面临同样的问题,你使用错了。 您应该使用moment.utc而不仅仅是moment

看看此刻的文档:http://momentjs.com/docs/#/parsing/utc/

result.open = moment.utc(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss"); 
result.save() 
4

我知道这是很迟,但在这里它是为那些与此挣扎Postgres的(也许这可以为您指出正确的方向其他引擎)

正如你所知postgres以UTC存储日期时间。

这个问题对我来说并不是Sequelize,而是pg包。

为了解决这个问题,你sequelize = new Sequelize()行之前把这个

var types = require('pg').types; 
var timestampOID = 1114; 
types.setTypeParser(1114, function(stringValue) { 
    return new Date(Date.parse(stringValue + "0000")); 
}); 

的问题,我认为,是该pg包做new Date(stringValue),它返回服务器的时区,这是错误的日期(除非它在UTC本身)

欲了解更多信息,请参阅此主题: https://github.com/brianc/node-postgres/issues/429

0

我有同样的问题。 我已经固定它是这样的:

config/sequelize.js

const sequelize = new Sequelize(database, user, password, { 
host, 
dialect: 'mysql', 
port, 
operatorsAliases, 
dialectOptions: { 
    useUTC: true, // -->Add this line. for reading from database 
}, 
timezone: '+02:00', // -->Add this line. for writing to database 
pool: { 
    max: 10, 
    min: 0, 
    idle: 10000, 
}, 
logging: console.log, 
// define: {}, 
}) 

momentJS(UTC):

const ACCEPT_FORMAT = 'YYYY-MM-DD hh:mm:ss' 
const { start_date, end_date } = req.params 
const start = moment.utc(start_date, ACCEPT_FORMAT) 
const end = moment.utc(end_date, ACCEPT_FORMAT) 
console.log(start) 
console.log(end) 

希望这将帮助别人.... :)