如何在 sequelize ORM Query 中更改日期格式?

Posted

技术标签:

【中文标题】如何在 sequelize ORM Query 中更改日期格式?【英文标题】:How to change date format in sequelize ORM Query? 【发布时间】:2017-01-31 12:47:00 【问题描述】:

我有这个模型

var Loans = sequelize.define('Loans', 
    book_id: DataTypes.INTEGER,
    patron_id: DataTypes.INTEGER,
    loaned_on: DataTypes.DATE

查询如下。

Loans.findAll().then(function(loans) 
   res.render('book_detail', loans: loans);
);

我的问题是,如何在查询结果中以 YYYY-MM-DD 格式更改 loaned_on 字段,并且不想要时间戳

目前loaned_on 字段值在html 表单字段中显示为Sun Jan 29 2017 00:00:00 GMT+0000 (GMT),而在db 值中存储为2017-01-29 00:00:00.000 +00:00

顺便说一句,dbsqlite3

【问题讨论】:

【参考方案1】:

我认为更好的解决方案是使用 sequelize 的自定义 getter。定义模型时,为 loaned_on 字段添加一个 getter,以进行所需的转换。像这样:

var Loans = sequelize.define('Loans', 
    book_id: DataTypes.INTEGER,
    patron_id: DataTypes.INTEGER,
    loaned_on: 
        type: DataTypes.DATE,
        get: function(fieldName) 
            const rawValue = this.getDataValue('loaned_on');
            // parse raw value using whatever logic you want
            // this won't work, but you get the idea
            return moment(rawValue).toISOString();
        
    

此外,这个 SO 答案显示了如何修改您的数据库配置,以便以您喜欢的方式存储日期(如果您使用的是 postgres):

https://***.com/a/48388996/814463

sqlite3 可能有一个类似的选项。

【讨论】:

【参考方案2】:

使用https://momentjs.com/docs/#/parsing/string-format/ 或

Loans.findAll().then(function(loans) 
    loans = loans.map(function (loan) 
        loan.loaned_on = loan.loaned_on.getFullYear() + '-' + 
            (loan.loaned_on.getMonth() < 9 ? '0' : '') + 
            (loan.loaned_on.getMonth() + 1) + '-' + loan.loaned_on.getDate();
        return loan;
    );
    res.render('book_detail', loans: loans);
);

【讨论】:

是的,这项工作也很好。我还在Loans model instanceMethods 中创建了一个实例方法,如下所示: loanedOn: function() return dateFormat(this.loaned_on, "yyyy-mm-dd"); ,

以上是关于如何在 sequelize ORM Query 中更改日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

如何在 Sequelize ORM 中获取不带前缀表名的连接数据结果

如何在sequelize ORM中使用从时间戳中选择并提取日期到月份和年份?

DAO vs ORM - 在 Sequelize.js 的上下文中解释的概念

如何使用 Sequelize.js ORM 正确迁移 sqlite3 数据库?

如何使用 sequelize ORM 编写内连接查询?