HighchartsでUnixTimeを利用する場合の注意
ちょっとだけ、はまったのでメモ。
HighchartsでUnixTimeを利用する場合、以下のオプションを設定して、ローカルのTimeZoneを利用させる必要がある。
Highcharts.setOptions({ global: { useUTC: false } });
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側で差分を埋めるようにしてみた。