NodeJS ответил MySQL часовой пояс отличается, когда я получаю непосредственно из MySQL

когда я запрашиваю MySQL напрямую, я получаю дату в UTC (я устанавливаю UTC на сервере MySQL), но с NodeJS я получаю данные локального часового пояса UTC+2, почему? Как установить NodeJS для получения UTC?

enter image description hereenter image description here

5 ответов


Я добавил часовой пояс в индекс.js при инициализации соединения mysql

var db_config = {
  host     : 'localhost',
  user     : 'xxx',
  password : '',
  database : 'xxx',
  timezone: 'utc'  //<-here this line was missing
};

хотя это старый вопрос, у меня была аналогичная проблема и добавление config timezone: 'utc' не решил проблему (стало хуже).

решение, которое я наконец использовал, - это добавить config dateStrings : true такой, что у меня есть сырая строка даты и MySQL модуль не делает сам преобразование в дату javascript.

затем я использую момент.utc (thedatestring) для получения подходящего объекта javascript (в базе данных я сохраняю все даты как UTC в Столбцах DATETIME независимо от конфигурация хоста). Используя момент.js.


попробуйте установить значение часового пояса в "UTC+0", что сработало для меня.


можно также задать datestrings свойство DATETIME.

dateStrings: принудительно типы дат (отметка времени, DATETIME, DATE) должны быть возвращены в виде строк, а не раздуваться в объекты даты JavaScript. (По умолчанию: false)

см.:https://github.com/mysqljs/mysql#connection-options


после падения к этой проблеме снова и снова я нашел желаемое решение.

мой nodeJS app извлечение данных из mySQL db через Sequelize ОРМ.

убедитесь, что часовой пояс одинаковый везде.

config.js:

const timezone = 'UTC'
process.env.TZ = timezone

sequelize_config.js:

const sequelize = new Sequelize(database, user, password, 
  options: {
    host,
    dialect: 'mysql',
    port,

    dialectOptions: {
       /* useUTC: true, **deprecated** */ 
       timezone: 'utc'
    },
  }
}

надеюсь, что это сэкономит чье-то время от падения в этот цикл... :)