2017-07-14 5 views
2

knexjsを使用しています。YYYY-MM-DD HH:mm:ssのようにデータを挿入します。例:2017-07-14 15:00:00。データを取得するときに保存した後、datetimeカラムの値がjavasript Dateオブジェクトとして返されます。 これらのオブジェクトをYYYY-MM-DD HH:mm:ssの形式で戻したいのですが、YYYY-MM-DDTHH:mm:ss.000Zの形式、たとえば2017-06-23T06:44:44.000Zに戻っています。 私はそれらを手動で反復して変換して返します。私はmysqlドライバやknexjsの設定のようにそれを行う別の方法があるかどうか疑問に思っていた。現在私のknexjs設定はこれです。KnexjsがJavaScriptタイムオブジェクトとしてmysqlタイムスタンプ、datetimeカラムを返す

var connection = require('knex')({ 
      client: 'mysql', 
      connection: { 
       host: db.host, 
       user: db.user, 
       password: db.password, 
       database: db.database, 
       timezone: 'UTC' 
      } 
     }); 

答えて

3
は、これであなたの接続オブジェクトを変更し

var connection = require('knex')({ 
     client: 'mysql', 
     connection: { 
      host: db.host, 
      user: db.user, 
      password: db.password, 
      database: db.database, 
      timezone: 'UTC', 
      dateStrings: true 
     } 
    }); 
+0

ありがとうございました。魅力的に働いた:) –

+1

デフォルトのフォーマットがokなら、このケースでは 'dateStrings'オプションが本当に良い選択肢です。 +1 –

3

これは、あなたがtypeCast接続オプションを追加することにより、デフォルトの変換を無効にすることができますどのようにmysqlのドライバはJavaScriptにデータベースから読み込ま種類を変換する(https://github.com/mysqljs/mysql#type-casting

です:

var moment = require('moment'); 
var connection = require('knex')({ 
     client: 'mysql', 
     connection: { 
      host: db.host, 
      user: db.user, 
      password: db.password, 
      database: db.database, 
      timezone: 'UTC', 
      typeCast: function (field, next) { 
       if (field.type == 'DATETIME') { 
       return moment(field.string()).format('YYYY-MM-DD HH:mm:ss'); 
       } 
       return next(); 
      } 
     } 
    }); 

私はDATETIMEまたはTIMESTAMPタイプのカスタム解析を追加する必要があるかどうかはわかりません。

+0

感謝@mikaelそれは確かにデフォルトのフォーマットを望んでいない人を助けるでしょう。 –

関連する問題