【问题标题】:How to change date format in sequelize ORM Query?如何在 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

【问题讨论】:

    标签: javascript node.js orm sequelize.js


    【解决方案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://stackoverflow.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"); },
      猜你喜欢
      • 2019-03-26
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 2019-01-09
      • 2021-06-07
      • 2015-08-26
      相关资源
      最近更新 更多