有没有一种方法可以强制Sequelize使用UNIX时间戳作为默认时间格式,无论是createdAt/updatedAt时间戳还是自定义的Sequelize.DATE字段类型?
谢谢!
P.S. 我正在使用MySQL。
有没有一种方法可以强制Sequelize使用UNIX时间戳作为默认时间格式,无论是createdAt/updatedAt时间戳还是自定义的Sequelize.DATE字段类型?
谢谢!
P.S. 我正在使用MySQL。
虽然eggyal
的答案是在MySQL中正确的做法,但我们中有些人可能会在需要使用unix时间戳而非日期/时间戳的环境或团队中工作。
我发现一种很好的方法是在sequelize内使用钩子。在每个模型的底部,您可以添加以下代码:
{
tableName: 'Addresses',
hooks : {
beforeCreate : (record, options) => {
record.dataValues.createdAt = Math.floor(Date.now() / 1000);
record.dataValues.updatedAt = Math.floor(Date.now() / 1000);
},
beforeUpdate : (record, options) => {
record.dataValues.updatedAt = Math.floor(Date.now() / 1000);
}
}
}
createdAt
和 updatedAt
字段作为Unix时间戳。在任何时刻,根据国际日期变更线的位置,有两个可能的日期:这意味着从UNIX时间戳转换为日期需要考虑时区。
例如,UNIX时间戳946684800
是2000年1月1日00:00:00Z
。虽然这代表了新千年的第一天在大西洋以东几乎所有地方,但在那个海洋以西的地方仍然是除夕。所以它代表哪个日期?
虽然可以将日期转换为时间戳,但必须定义自己的约定来做到这一点(例如,将给定日期表示为UTC的午夜),否则每个编码可能会以不同的方式表示相同的日期。总的来说,这是一个坏主意,可能会产生各种意想不到的后果。
存在DATE
数据类型的原因是:这是存储日期的正确方式。请使用它。
tableName
和hooks
字段是模型的选项对象的一部分。当使用.define()
时,它是属性对象之后的参数。 - Jordan Dodson