Knexjs返回mysql时间戳,日期时间列为Javascript日期对象

问题描述:

我正在使用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' 
      } 
     }); 

这种变化您的连接对象:

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 –

这是司机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它肯定会帮助其他不想使用默认格式的人。 –