Flotで『xaxis:{mode:"time"}』を使う際のtime zoneについて


インターネットサービスを提供する場合は、ユーザがサービスを利用している場所のlocaltimeをDBに保存することが一般的だと思いますが、DBから取得した値をJavaScriptのDate関数を使って数値化するとUTCの時間で計算されるので、配列にデータを格納する際にtime zoneのズレを補正する必要があります。


InnoPMの個人レポートソースコードを抜粋するとこんな感じ。(TTのコードも入ってしまいますが。。。)

var data = [];
var tzo = (new Date().getTimezoneOffset()) * 60 * 1000;

[% FOREACH d IN data %]
data.push([ (new Date([% d.year %], [% d.month %] - 1, [% d.day %])).getTime() - tzo, [% d.hours %] ]);
[% END %]


参考:time zoneの処理に関するスレッド。他にもいろいろな対応方法があります。
Issue 141 - flot - Flot's time zone handling - Attractive Javascript plotting for jQuery - Google Project Hosting


ちなみに、この問題はhourlyやdaily等でのグラフ作成時に注意すべき点で、monthlyやyearlyの場合はtime zoneによる時間差はグラフの見た目に大きく影響しないので気にしなくても大丈夫かと思います。