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

Knexjs returning mysql timestamp, datetime columns as Javascript Date object

我正在使用 knexjs,我以 YYYY-MM-DD HH:mm:ss 格式插入数据,例如 2017-07-14 15:00:00,并且在获取数据时保存后,日期时间列值被 return 编辑为 javasript Date 对象。 我想 return 那些格式为 YYYY-MM-DD HH:mm:ss 的对象,但它 return 格式为 YYYY-MM-DDTHH:mm:ss.000Z,例如 2017-06-23T06:44:44.000Z。 我 return 通过手动迭代和转换它们来处理它们。我想知道是否有另一种方法可以像在 mysql 驱动程序或 knexjs 配置中那样做。目前我的 knexjs 配置是这样的。

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

这就是 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 类型添加自定义解析。

在我的例子中,连接是一个字符串,所以我必须找到日期 OID 并使用 pg.types.setTypeParser(DATE_OID, d => moment(d));