環境と事象はタイトルの通り
ググったら答えが見つかった
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(日付データ)すると再度システムローカルの日付データに変換される。
雑な感じですが、そんなポカを私はやらかしました。