2017-07-14 198 views
2

我正在使用knexjs我插入數據的格式YYYY-MM-DD HH:mm:ss例如2017-07-14 15:00:00和保存後,當數據被提取日期時間列值返回爲javasript日期對象。 我想返回格式爲YYYY-MM-DD HH:mm:ss的那些對象,但它以YYYY-MM-DDTHH:mm:ss.000Z的格式返回,例如2017-06-23T06:44:44.000Z。 我通過手動迭代和轉換它們來返回它們。我想知道是否有另一種方式來做到這一點,如在MySQL驅動程序或knexjs配置。目前我的knexjs配置是這樣的。Knexjs返回mysql時間戳,日期時間列爲Javascript日期對象

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

在這種情況下'dateStrings'選項確實是更好的選擇,如果默認格式是好的。 +1 –

3

這是司機MySQL如何轉換從數據庫中讀取到JavaScript類型中(https://github.com/mysqljs/mysql#type-casting

您可以通過添加typeCast連接選項覆蓋默認的轉換:

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

我不確定是否需要爲DATETIMETIMESTAMP類型添加自定義分析。

+0

感謝@mikael它肯定會幫助其他不想使用默認格式的人。 –

相關問題