mtcdotcom's blog

なんか、メモとか、残しておきたいこととか。

MongoLab上でAsia/TokyoのTimeZoneデータを扱う

Asia/TokyoのTimeZoneで生成されたUnix TimeをHeroku + MongoLabで扱った際のメモ。

やりたかったこと

  • 国内のサイトで生成されたUnixTimeデータをHerokuスケジューラで起動設定したスクリプトで収集し、MongoDBに保存
  • MongoDB上でUnixTimeをYYYYMMDDフォーマットの日付文字列に変換
  • 変換した日付文字列をkeyとして、Map/Reduceをかけ、日付毎の推移データを集計

やったこと

HerokuのTimeZone

Heroku上でAsia/TokyoのTimeZoneのデータを扱うときに必要な作業は以下の設定のみ。

% heroku config:add TZ=Asia/Tokyo

MongoLabのTimeZone

MongoLabのサーバではUnixTimeをDateに変換する際、MongoLab実行環境の時差と東京の時差を取得して、時差として計算する必要がある。

var date   = new Date();
var offset = 0;
offset += date.getTimezoneOffset() * 60000; // MongoLab実行環境の時差
offset += 3600000 * 9; // 東京の時差
date.setTime(end_time_ut * 1000 + offset);
:

念のため、使ってるメソッドのメモ…

  • getTimezoneOffset()はグリニッジ標準時間とローカル時間との差を分単位で返す
  • setTimeはDateクラスのオブジェクトに対してミリ秒の形式で値を設定する→offsetはミリ秒に変換して、計算

MongoDB上でTimeZoneを設定するオプションとかあるのかな…
探したけど、見つからなかったので、ひとまず、JS側で差分を埋めるようにしてみた。