我在node.js中使用Sequelize来保存打开和关闭时间.我也使用moment.js来格式化.改变FindOrCreate我这样做:
result.open = moment(hours.open,"hh:mma").format("YYYY-MM-DD HH:mm:ss"); result.save() ...
这工作正常,时间格式化为MysqL的日期时间格式.问题是当我检索时间时Seqquelize认为它是UTC时间并将其转换为EST(我的服务器时区).@H_502_5@
我希望它以UTC的形式进入数据库并以相同的方式出现.有什么我做错了吗?为什么Sequelize在插入时不将其转换为UTC,但假设它的UTC出来了?另外,有没有办法让它尝试转换为我的服务器时区?@H_502_5@
解决方法
我知道这已经很晚了,但是对于那些与postgres挣扎的人来说(也许这可以指出你在其他引擎的正确方向)
如您所知,postgres以UTC格式存储日期时间.@H_502_5@
对我来说,这个问题原来不是在Sequelize中,而是在pg包中.@H_502_5@
要修复它,请将它放在sequelize = new Sequelize()行之前@H_502_5@
var types = require('pg').types; var timestampOID = 1114; types.setTypeParser(1114,function(stringValue) { return new Date( Date.parse(stringValue + "0000") ); });
我认为问题是pg包正在执行新的Date(stringValue),它返回服务器时区的日期,这是错误的(除非它在utc本身)@H_502_5@
有关详细信息,请参阅此主题:
https://github.com/brianc/node-postgres/issues/429@H_502_5@