Knexjs将mysql时间戳,datetime列作为Javascript Date对象返回

Sha*_*ikh 4 javascript mysql node.js knex.js

我正在使用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配置是这样的.

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

Sir*_*Haq 10

用这个改变你的连接对象:

var connection = require('knex')({
        client: 'mysql',
        connection: {
            host: db.host,
            user: db.user,
            password: db.password,
            database: db.database,
            timezone: 'UTC',
            dateStrings: true
        }
   });
Run Code Online (Sandbox Code Playgroud)


Mik*_*stö 10

这就是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();
            }
        }
   });
Run Code Online (Sandbox Code Playgroud)

我不确定您是否需要添加自定义解析DATETIMETIMESTAMP键入.