Webアプリでタイムゾーンの処理をJavaScriptで行う。

我が社が提供するサービス「ChanTo.me」では、ユーザ毎にタイムゾーンを設定できるようにしています。でもこれにはいくつか問題がありました。

  • ログインしていない場合は、デフォルトを決めてそれを利用するしかない。
  • Pythonで各地のタイムゾーンに対応できるモジュールのPytzは、ファイル数が多く、Google App Engineではできれば使いたくない。

今は、Pytzを使って実現しているのですが、Pytzを使わなくて良いようにカスタマイズ中です。

それでは、Pytzを使わないでどうするかというと、以下の手を考えました。

実現方法は、以下です。
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を使わずに済むかな。