Sequelize Postgres createdAt time with timezone,以格式保存和获取日期和时间
Posted
技术标签:
【中文标题】Sequelize Postgres createdAt time with timezone,以格式保存和获取日期和时间【英文标题】:Sequelize Postgres createdAt time with timezone, saving and getting date and time in a format 【发布时间】:2020-03-16 06:56:27 【问题描述】:image of the user table, createdAt only saving the time and there is no date information with time and timezone field我正在使用 sequelize 和 postgres,当我在数据库中保存用户或值时,postgres 会自动添加带有时间戳的 createAt 和 upDatedAt,当我检索 createdAt 的值时,它会给我“06:15:41.037000+00: 00”,我的问题是如何以格式化日期显示?请帮我。我尝试了 moment.js 进行转换,但它给了我“无效日期”错误。我搜索了很多例子,但无法理解这个问题。
this is the response I get when I make api call, but unable to convert the createdAt values to meaningful date as there is no date, only time
【问题讨论】:
【参考方案1】:我很快从另一个答案中抓住了这个...看看这里是怎么做的
const Test = sequelize.define('test',
// attributes
name:
type: DataType.STRING,
allowNull: false
,
createdAt:
type: DataType.DATE,
//note here this is the guy that you are looking for
get()
return moment(this.getDataValue('createdAt')).format('DD/MM/YYYY h:mm:ss');
,
updatedAt:
type: DataType.DATE,
get()
return moment(this.getDataValue('updatedAt')).format('DD/MM/YYYY h:mm:ss');
【讨论】:
这不起作用,因为当我从数据库中获取数据时,因为结果不包含任何日期时间“06:15:41.037000+00:00”,我不知道为什么我没有得到任何约会 那么你的模型是什么样的,你需要改变你原来的帖子并添加代码【参考方案2】:我通常在我的模型和迁移中手动创建“created_at”和“updated_at”,而不是从 sequelize 生成,它们的值是 sequelize.Date。这是代码:
createdAt:
type: Sequelize.DATE,
field: 'created_at',
,
updatedAt:
type: Sequelize.DATE,
field: 'updated_at'
并且时间戳为 false 以阻止从 sequelize 生成
timestamps: false
【讨论】:
【参考方案3】:对于 MYSQL
您可以使用 sequelize 函数仅在裁剪时间的情况下获取日期
model.findAll(
attributes: [
[sequelize.fn('DATE', sequelize.col('createdAt')), 'DateOnly']
]
)
这将帮助您仅获取日期。
对于 postgres
尝试用这个替换sequelize函数。
sequelize.fn('date_trunc', 'day', sequelize.col('created'))
【讨论】:
以上是关于Sequelize Postgres createdAt time with timezone,以格式保存和获取日期和时间的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?
如何在 Sequelize 中使用 Postgres 的 BIGSERIAL?