mysql - Strongloop 如何配置mysql时区?

标签 mysql timezone loopbackjs strongloop

我是 Strongloop 的新手。我的 datasources.json 配置如下:

"platformDB": {
"host": "localhost",
"port": 3306,
"database": "way",
"username": "root",
"password": "root",
"name": "platformDB",
"connector": "mysql"
},

UserAccount 是我的一个模型,如下所示:

"name": "UserAccount",
"plural": "user",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"id": {
  "type": "number",
  "required": false
},
"accountName": {
  "type": "string",
  "required": false
},
"roleName": {
  "type": "string",
  "required": false
},
"accessToken": {
  "type": "string",
  "required": false
},
"loginTime": {
  "type": "date",
  "required": false,
  "mysql": {
    "dataType": "datetime"
  }
}

当我调用 UserAccount.create 和 UserAccount.findById 函数时,它们的结果是好的。但是当我通过客户端工具连接mysql数据库时,我发现'loginTime'值是utc时间。这个结果与其他系统组件不协调,总之,我需要本地时间。 所以我跟踪loopback-connector-mysql源代码,我在数据源中找到时区属性如下:

var options = {
host: s.host || s.hostname || 'localhost',
port: s.port || 3306,
user: s.username || s.user,
password: s.password,
timezone: s.timezone,
socketPath: s.socketPath,
charset: s.collation.toUpperCase(), // Correct by docs despite seeming odd.
supportBigNumbers: s.supportBigNumbers,
connectionLimit: s.connectionLimit
};

所以我在datasources.json中配置“timezone”:“utc8”,UserAccount.findById函数结果与客户端工具相同,但UserAccount.create函数结果仍然是utc时间。这是为什么?

最佳答案

唯一的解决方案是修改核心文件。 编辑 /var/www/yourproject/node_modules/loopback-connector-mysql/lib/mysql.js

改变

function dateToMysql(val) {
  return val.getUTCFullYear() + '-' +
    fillZeros(val.getUTCMonth() + 1) + '-' +
    fillZeros(val.getUTCDate()) + ' ' +
    fillZeros(val.getUTCHours()) + ':' +
    fillZeros(val.getUTCMinutes()) + ':' +
    fillZeros(val.getUTCSeconds());

  function fillZeros(v) {
    return v < 10 ? '0' + v : v;
  }
}

***function dateToMysql(val) {
  return val.getFullYear() + '-' +
    fillZeros(val.getMonth() + 1) + '-' +
    fillZeros(val.getDate()) + ' ' +
    fillZeros(val.getHours()) + ':' +
    fillZeros(val.getMinutes()) + ':' +
    fillZeros(val.getSeconds());

  function fillZeros(v) {
    return v < 10 ? '0' + v : v;
  }
}***

这会节省您的时间 不要忘记投票;-)

关于mysql - Strongloop 如何配置mysql时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003166/

相关文章:

mysql - 在 Material list 中插入父项目的销售价格而不重复

php - 我无法更新 mysql(i) 数据库。如何在数据库中设置用户类型?

php - 防止不相关的mysql数据

r - date_format时区奇怪

mysql - 为什么我不能在我的 MySQL 数据库中保存长文本?

c# - ASP MVC - 使用时区和文化处理日期时间本地化

r - lubridate:与时区不一致的行为

javascript - 如果文档不存在,如何使用 LoopBack 从 MongoDb 中的远程方法中插入文档

passport.js - 如何为 loopbackJS 应用程序配置 SAML2 身份验证

javascript - 扩展内置用户模型以支持环回中的更多属性和行为