NodeJS ответил MySQL часовой пояс отличается, когда я получаю непосредственно из MySQL
когда я запрашиваю MySQL напрямую, я получаю дату в UTC (я устанавливаю UTC на сервере MySQL), но с NodeJS я получаю данные локального часового пояса UTC+2, почему? Как установить NodeJS для получения UTC?
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.
можно также задать datestrings свойство DATETIME.
dateStrings: принудительно типы дат (отметка времени, DATETIME, DATE) должны быть возвращены в виде строк, а не раздуваться в объекты даты JavaScript. (По умолчанию: false)
после падения к этой проблеме снова и снова я нашел желаемое решение.
мой 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'
},
}
}
надеюсь, что это сэкономит чье-то время от падения в этот цикл... :)