JavaScriptのDateオブジェクトに対して、JSON.stringify()メソッドに対するベストプラクティスを教えてください

投稿者: Anonymous

JavaScriptのDateオブジェクトの扱いについて質問します。
ブラウザ側からサーバにPOSTする時にデータをJSON化して送付することをと試みています。
しかし、JSON.stringify()メソッドにかけると【協定世界時(UTC)】に置き換えられてしまいます。

var someDay = new Date(2014,12,2);
console.log(someDay); --- > Wed Dec 03 2014 00:00:00 GMT+0900 (東京 (標準時))
console.log(JSON.stringify(someDay)); --> "2014-12-02T15:00:00.000Z"

サーバサイドでは、この挙動への対処を行いたくないので、ブラウザ側(JS側)で挙動に対する対処を行いたいと考えております。その際のベストプラクティスを教示頂けますと幸いです。

解決

タイムゾーン表記は処理系によってロケールに依存してしまい、上手く動かない場合もあります。
コンピュータの日付は 1970 年 1 月 1 日 00:00:00 UTC からの経過ミリ秒で管理出来ます。
この値さえあれば、どの時刻オフセットに対しても計算で Date クラスに戻す事が出来ますし、おおよそそのプログラミング言語でも取り扱えます。JavaScript であれば getTime() で取得出来ます。

var now = new Date();
console.log(now); // Tue Dec 16 2014 14:50:56 GMT+0900 (東京 (標準時))
var tm = now.getTime(); // 1418709056398

now = new Date(tm);
console.log(now); // Tue Dec 16 2014 14:50:56 GMT+0900 (東京 (標準時))

JSONという表記に拘る必要はありません。どうしてもJSONという事であれば

{
    "time": 1418709056398
}

の様に getTime() した値を保持するのが良いと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *