20

我们需要以特定格式而不是默认格式对返回日期进行续集。据我所知,没有办法在选项或任何其他方式中设置它。每次检索后都没有手动更新日期,任何人都能够轻松解决这个问题?还是我错过了什么?

4

6 回答 6

38

您可以使用 Sequelizefn方法。从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);
  });

将返回数据值:

[
  {"id": 1, "date_col_formed": "2014-01-01"},
  {"id": 2, "date_col_formed": "2014-01-02"}
   // and so on...
]
于 2014-08-13T04:35:56.207 回答
18

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');
                    }
                }

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

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

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

于 2019-06-21T05:18:13.577 回答
10

您可以定义自定义实例方法 getDate/setDate ,它将在续集内部表示和所需格式之间转换日期,如https://sequelize.org/master/manual/model-basics.html#taking-advantage-of-models-being-班级

于 2013-06-24T13:42:21.173 回答
1

如果您想将其转换为VARCHAR

attributes:{include:[[sequelize.cast(sequelize.col('dob'), 'VARCHAR') , 'dob']],exclude:['dob']}
于 2020-12-24T06:33:38.280 回答
0

要格式化日期,您可以使用 Sequelize.fn 方法。我尝试了所有提到的方法,但它不适用于 date_format。尝试用波纹管创建。

model.findAll({
  attributes: [
      'id',
      [sequelize.fn('FORMAT', sequelize.col('col_name'), 'yyyy-mm-dd'), 'col_name']
  ]})
  .then(function(result) {
    console.log(result);
  });

在这里,我使用了“FORMAT”而不是“DATE_FORMAT”,因为它通过错误:“date_format”不是 api 调用中可识别的内置函数名。

于 2022-02-14T07:15:35.113 回答
0

如果是我们使用 Sequelize CLI 创建的模型,请尝试这样的操作

           var sequelize= require('../models');
    model.findAll({
            attributes: [
                       'id',
                       'title'
           [sequelize.Sequelize.fn('date_format', sequelize.Sequelize.col('col_name'), '%d %b %y'), 'col_name']
                            ]}.then(function(result))
                             { // dateformate=04 Nov 2017
console.log(result)
}

访问此链接获取甲酸盐

于 2017-03-02T08:24:59.833 回答