LoginSignup
8
6

More than 5 years have passed since last update.

Node.js+Express4+MySQLでtimestampデータがUTCで取得される

Last updated at Posted at 2016-03-17

環境と事象はタイトルの通り

ググったら答えが見つかった
http://stackoverflow.com/questions/23571110/nodejs-responded-mysql-timezone-is-different-when-i-fetch-directly-from-mysql

Node.jsでMySQLを使うときに


//注意:テキトー
Config = require('config');
mysql = require('mysql');

var conn = mysql.createConnection({
    host: Config.mysql.host,
    user: Config.mysql.user,
    password: Config.mysql.pass,
    database: Config.mysql.dbname,
    timezone: 'jst' //timezoneの指定省略の場合はシステムローカルになる
});

みたいな感じでコネクションオブジェクト生成するけど、その際にtimezoneの指定がないとデフォルトのUTCになる。まぁ当たり前なんですけど。
[訂正] 失礼しました。timezoneの指定を省略した場合はシステムローカルでした。
[参照] https://www.npmjs.com/package/mysql

なのでちゃんとtimezoneを日本時間に設定しておかないと、日本時間のデータを挿入したのに読み出すと元データ(MySQLに格納されたデータ)をUTCの時間と認識して日本時間へと時差計算した値が表示されることになる。

[追記]システムローカル、MySQLのtimezoneが揃っていれば基本的には気にならないはず。おかしい場合は挿入前や表示前など日付データを扱う際にnew Date(日付データ)すると再度システムローカルの日付データに変換される。

雑な感じですが、そんなポカを私はやらかしました。

8
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6