是否有一种简单的方法可以让Sequelize以特定格式返回日期/时间字段?

Car*_*ter 8 node.js sequelize.js

我们需要以特定格式提供续订日期,而不是默认格式.据我所知,没有办法在选项中或任何其他方式设置它.如果没有人在每次检索日期后手动更新日期,那么任何人都可以轻松解决这个问题吗?或者我错过了什么?

Jon*_*Saw 29

你可以使用Sequelize fn方法.从API Reference中,该fn函数将帮助在查询中创建表示SQL函数的对象.

例如:

model.findAll({
  attributes: [
      'id',
      [sequelize.fn('date_format', sequelize.col('date_col'), '%Y-%m-%d'), 'date_col_formed']
  ]})
  .then(function(result) {
    console.log(result);
  });
Run Code Online (Sandbox Code Playgroud)

将返回数据值:

[
  {"id": 1, "date_col_formed": "2014-01-01"},
  {"id": 2, "date_col_formed": "2014-01-02"}
   // and so on...
]
Run Code Online (Sandbox Code Playgroud)


iwa*_*rte 17

21/06/2019

有点晚,但提供更新。

Sequelize 是一个强大的 ORM(我不是说它是最好的解决方案),但它的文档非常糟糕。

无论如何,如果你想在你的模型中配置这个,除了必须在你的查询中重复这个之外,因为其他响应状态你可以这样做:

     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');
                    }
                }
Run Code Online (Sandbox Code Playgroud)

如果您使用日期提供信息为:上次更新、首次登录、上次登录。这是要走的路。

函数 get 返回新的格式化元素,因此它也不应该仅限于日期!请记住,这会减慢您的查询速度,因此请谨慎使用。;)

更多信息(我知道我知道,但 docs 是游戏的名称):http : //docs.sequelizejs.com/manual/models-definition.html#getters--amp--setters


mrv*_*rvn 7

你可以定义自定义实例方法getDate/setDate,它可以在sequelize内部表示和所需格式之间转换日期,如http://sequelize.readthedocs.org/en/latest/docs/models-definition/index.html(参见'扩展模特的部分)

  • 只是出于好奇,您最终使用了什么? (2认同)