我的一个表中有一个名为birthdate的字段,其数据类型为Date,但当我尝试通过Express应用程序导出数据时,它会将日期更改为比应该更少的日期。例如,出生日期真的是6月20日,当我出口它变成6/19/1978。
我注意到我在注销数据时注意到了一些东西,即使它只是一个Date日期字段(Sequelize?)正在添加时间戳。因此,如果我没有对日期进行任何格式化(我需要),那么日期将是正确的,但对我们的出口不可读。
当我从我的开发笔记本运行应用程序时,一切都运行良好但是当我推送到QA时它会返回错误的日期。
如果我从我的笔记本(位于太平洋时区)打开PG3Admin来查询QA / Production服务器(位于夏威夷时区)上的数据,则数据看起来是正确的。
我正在使用Sequelize v3.4.1连接到Postgres 9.3数据库。同样在我的Sequelize配置文件中,我设置了“timezone”:“ - 10:00”选项。
答案 0 :(得分:0)
最好将数据类型为DATEONLY的数据进行后续存储,并使用DATE作为时间戳记
_applyTimezone(date, options) {
if (options.timezone) {
if (momentTz.tz.zone(options.timezone)) {
return momentTz(date).tz(options.timezone);
}
return (date = moment(date).utcOffset(options.timezone)); <-- this will convert your date to UTC
}
return momentTz(date);
}
您需要在序列化配置中定义时区,以防生日最好使用DATEONLY数据类型
因此您的模型可以像
birthday: {
type: DataTypes.DATEONLY
},
createdAt: {
type: DataTypes.DATE
},
updatedAt: {
type: DataTypes.DATE
}
所有数据类型都可以在doc中看到
答案 1 :(得分:-1)
我不知道这是否是最好的解决方案,但是它对我有用:
Sequelize.YOURDIALECT.DATEONLY.parse = function(value) {
return moment(moment(value).format('YYYY-MM-DD'), "YYYY-MM-DD").add(1, 'days');
};
希望这对其他人有帮助。