Knex returns DATETIME 字段应用我的机器时区的偏移量
Knex returns DATETIME fields applying offset of my machine timezone
我在数据库的时区 Europe/Madrid
中保存了以下行:
dateA = '2019-03-26 15:00:00'
dateB = '2019-03-26 14:00:00'
选择条目时:
let entry = this.query().findById(id)
我得到以下值 (console.log(entry)
):
{
dateA: 2019-03-26T06:00:00.000Z,
dateB: 2019-03-26T05:00:00.000Z
}
什么应用了这个转换?
我的环境:
- 我正在使用 knex、objection 和 moment
- 时刻配置为
moment.tz.setDefault('Europe/Madrid')
- 我的本地机器时区设置为
UTC+09:00
(Chita) 用于测试
我试过了:
在创建 knex 时设置连接时区:
const connection = {
user: dbCreds.username,
password: dbCreds.password,
host: hostname,
database: dbCreds.database,
timezone: '-1:00'
}
const pool = knex({
client: 'mysql2',
connection,
pool: {
min: 2,
max: 30
}
})
我仍然得到相同的结果
终于知道是怎么回事了。
Knex,在检索日期时间字段的信息时检查数据库的时区。您可以使用以下方式检查它:
SELECT @@global.time_zone, @@session.time_zone;
我的情况是 returns SYSTEM SYSTEM
。所以它使用我的机器时区。为了测试它,我将其更改为 UTC
。
所以现在,当读取以下值时:
dateA = '2019-03-26 15:00:00'
dateB = '2019-03-26 14:00:00'
Knex 假定其为 UTC,因此返回 UTC 中的值:
{
dateA: 2019-03-26T15:00:00.000Z,
dateB: 2019-03-26T14:00:00.000Z
}
似乎无法将 MySQL 配置为使用 'Europe/Madrid'
作为默认时区。
我在数据库的时区 Europe/Madrid
中保存了以下行:
dateA = '2019-03-26 15:00:00'
dateB = '2019-03-26 14:00:00'
选择条目时:
let entry = this.query().findById(id)
我得到以下值 (console.log(entry)
):
{
dateA: 2019-03-26T06:00:00.000Z,
dateB: 2019-03-26T05:00:00.000Z
}
什么应用了这个转换?
我的环境:
- 我正在使用 knex、objection 和 moment
- 时刻配置为
moment.tz.setDefault('Europe/Madrid')
- 我的本地机器时区设置为
UTC+09:00
(Chita) 用于测试
我试过了:
在创建 knex 时设置连接时区:
const connection = {
user: dbCreds.username,
password: dbCreds.password,
host: hostname,
database: dbCreds.database,
timezone: '-1:00'
}
const pool = knex({
client: 'mysql2',
connection,
pool: {
min: 2,
max: 30
}
})
我仍然得到相同的结果
终于知道是怎么回事了。
Knex,在检索日期时间字段的信息时检查数据库的时区。您可以使用以下方式检查它:
SELECT @@global.time_zone, @@session.time_zone;
我的情况是 returns SYSTEM SYSTEM
。所以它使用我的机器时区。为了测试它,我将其更改为 UTC
。
所以现在,当读取以下值时:
dateA = '2019-03-26 15:00:00'
dateB = '2019-03-26 14:00:00'
Knex 假定其为 UTC,因此返回 UTC 中的值:
{
dateA: 2019-03-26T15:00:00.000Z,
dateB: 2019-03-26T14:00:00.000Z
}
似乎无法将 MySQL 配置为使用 'Europe/Madrid'
作为默认时区。