Knexjs返回mysql timestamp,datetime列作为JavaScript Date对象

kupeojn6  于 2023-09-29  发布在  Java
关注(0)|答案(3)|浏览(99)

我使用的是knex,我插入的数据格式为YYYY-MM-DD HH:mm:ss,例如2017-07-14 15:00:00。保存后,当获取数据时,datetime列值将作为JavaScript Date对象返回。
我想以YYYY-MM-DD HH:mm:ss的格式返回这些对象,但knex以YYYY-MM-DDTHH:mm:ss.000Z的格式返回它们,例如2017-06-23T06:44:44.000Z
我通过手动迭代和转换它们来返回它们。我想知道是否有另一种方法可以像在mysql驱动程序或knex配置。
这是我的knex配置:

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

roejwanj1#

使用以下命令更改连接对象:

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

ma8fv8wu2#

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

yfwxisqw

yfwxisqw3#

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

相关问题