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 创建具有关联层次结构的对象

如何在 Sequelize 中使用 Postgres 的 BIGSERIAL?

Sequelize w/Postgres 测试异步错误

Node.js Sequelize UUID 主键 + Postgres

Node.js:如何在 Sequelize 中使用 Postgres 存储过程?