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
}
});
答
这是司机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();
}
}
});
我不确定是否需要为DATETIME
或TIMESTAMP
类型添加自定义分析。
+0
感谢@mikael它肯定会帮助其他不想使用默认格式的人。 –
谢谢。像一个魅力工作:) –
在这种情况下'dateStrings'选项确实是更好的选择,如果默认格式是好的。 +1 –