Webアプリでタイムゾーンの処理をJavaScriptで行う。
我が社が提供するサービス「ChanTo.me」では、ユーザ毎にタイムゾーンを設定できるようにしています。でもこれにはいくつか問題がありました。
- ログインしていない場合は、デフォルトを決めてそれを利用するしかない。
- Pythonで各地のタイムゾーンに対応できるモジュールのPytzは、ファイル数が多く、Google App Engineではできれば使いたくない。
今は、Pytzを使って実現しているのですが、Pytzを使わなくて良いようにカスタマイズ中です。
それでは、Pytzを使わないでどうするかというと、以下の手を考えました。
- サーバは、すべてUTCで処理する。
- ブラウザ側((JavaScript)で、UTCの日時をPC側のタイムゾーンに変換する。
実現方法は、以下です。
1. サーバからは、次のようなhtmlを出力させます。
<span class="datetime" alt="Tue Feb 2 02:14:57 2010" ></span>
altにUTCの日時を設定しています。
2. ブラウザのJavaScriptで、altをローカルのタイムゾーンに変換して表示する。
var tmpdate = new Date(); var tzoffset = tmpdate.getTimezoneOffset() * 60000; $('.datetime').each(function(idx,obj){ var date_str = $(obj).attr('alt'); var orgtime = new Date(Date.parse(date_str) - tzoffset); $(obj).html(orgtime.toLocaleString()); });
altの日時を、一旦ローカルな時間として読み取り、それをタイムゾーンのオフセット分ずらして、本来のローカル時間にしています。
サーバ側から出力する日時のフォーマットは、都合の良い形式を使えばいいでしょう。
これで、Pytzを使わずに済むかな。