Sequelize 仅以 UTC 格式读取日期时间
Sequelize reads datetime in UTC only
我已将 timezone
选项设置为我的时区(Europe/Zagreb
并且我也尝试过 +02:00
),并且时间已按原样保存,但是,从数据库中读取时间时,Sequelize 将其转换为 UTC。我也尝试过不同的时区,每个时区都正确保存,但从数据库读取时总是转换为 UTC。
我是不是做错了什么,或者这是一个已知问题,是否有任何解决方法?
我创建了一个新连接:
sequelize = new Sequelize(config.database, config.username, config.password, config);
我的配置如下所示:
"development": {
"username": "root",
"password": "root",
"database": "db",
"host": "localhost",
"dialect": "mysql",
"timezone": "Europe/Zagreb"
}
你可以试试这段代码,我遇到了同样的问题,这对我有用。
const sequelize = new Sequelize(mysql.database, mysql.user, mysql.password, {
host: mysql.host,
port:3306,
dialect:'mysql',
define: {
underscored: true,
freezeTableName: true, //use singular table name
timestamps: false, // I do not want timestamp fields by default
},
dialectOptions: {
useUTC: false, //for reading from database
dateStrings: true,
typeCast: function (field, next) { // for reading from database
if (field.type === 'DATETIME') {
return field.string()
}
return next()
},
},
timezone: '+01:00'
});
如果您使用 UTC,可能不需要时区。
例如,我的mysql服务器时区是'+08:00',
"mysql2": "^1.6.4",
"sequelize": "^4.41.2"
const sequelize = new Sequelize(database, username, password, {
host: hostname,
port: port,
dialect: 'mysql',
dialectOptions: {
typeCast: function (field, next) {
if (field.type == 'DATETIME' || field.type == 'TIMESTAMP') {
return new Date(field.string() + 'Z');
}
return next();
}
},
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
您可以试试这个对我有用的选项:
const sequelize = new Sequelize(database, username, password, {
host: hostname,
port: port,
dialect: 'mysql',
dialectOptions: {
encrypt: false,
options: {
useUTC: false, // for reading from database
},
},
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
我已将 timezone
选项设置为我的时区(Europe/Zagreb
并且我也尝试过 +02:00
),并且时间已按原样保存,但是,从数据库中读取时间时,Sequelize 将其转换为 UTC。我也尝试过不同的时区,每个时区都正确保存,但从数据库读取时总是转换为 UTC。
我是不是做错了什么,或者这是一个已知问题,是否有任何解决方法?
我创建了一个新连接:
sequelize = new Sequelize(config.database, config.username, config.password, config);
我的配置如下所示:
"development": {
"username": "root",
"password": "root",
"database": "db",
"host": "localhost",
"dialect": "mysql",
"timezone": "Europe/Zagreb"
}
你可以试试这段代码,我遇到了同样的问题,这对我有用。
const sequelize = new Sequelize(mysql.database, mysql.user, mysql.password, {
host: mysql.host,
port:3306,
dialect:'mysql',
define: {
underscored: true,
freezeTableName: true, //use singular table name
timestamps: false, // I do not want timestamp fields by default
},
dialectOptions: {
useUTC: false, //for reading from database
dateStrings: true,
typeCast: function (field, next) { // for reading from database
if (field.type === 'DATETIME') {
return field.string()
}
return next()
},
},
timezone: '+01:00'
});
如果您使用 UTC,可能不需要时区。
例如,我的mysql服务器时区是'+08:00',
"mysql2": "^1.6.4", "sequelize": "^4.41.2"
const sequelize = new Sequelize(database, username, password, {
host: hostname,
port: port,
dialect: 'mysql',
dialectOptions: {
typeCast: function (field, next) {
if (field.type == 'DATETIME' || field.type == 'TIMESTAMP') {
return new Date(field.string() + 'Z');
}
return next();
}
},
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
您可以试试这个对我有用的选项:
const sequelize = new Sequelize(database, username, password, {
host: hostname,
port: port,
dialect: 'mysql',
dialectOptions: {
encrypt: false,
options: {
useUTC: false, // for reading from database
},
},
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});