web-dev-qa-db-ja.com

Sequelizeに特定の形式の日付/時刻フィールドを返すようにする簡単な方法はありますか?

デフォルトではなく、特定の形式で返品日を続編にする必要があります。私の知る限り、オプションでそれを設定する方法やその他の方法はありません。取得後に日付を毎回手動で更新する以外に、誰でもこれを簡単に解決できましたか?それとも私は何かが足りないのですか?

11
CargoMeister

次のように、続編の内部表現と目的の形式の間で日付を変換するカスタムインスタンスメソッドgetDate/setDateを定義できます http://sequelize.readthedocs.org/en/latest/docs/models-definition/index.html (「モデルの拡張」セクションを参照)

9
mrvn

Sequelize fnメソッドを使用できます。 APIリファレンス から、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...
]
33
Jon Saw

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は新しいフォーマットされた要素を返すので、日付に制限されるべきではありません!これによりクエリが遅くなることを覚えておいてください。慎重に使用してください。 ;)

詳細(私は知っていますが、ドキュメントはゲームの名前です): http://docs.sequelizejs.com/manual/models-definition.html#getters--amp--setters

4
iwaduarte

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

ギ酸塩についてはこのリンクにアクセスしてください

0
Adiii