2012-05-04 5 views
1

Backbone.jsの同期を使用してモデルをデータベースに保存しています。ローカルタイムゾーンのDateオブジェクトをBackbone.jsと同期させるには?

問題は、Backbone.jsの同期がDateを自分のローカルタイムゾーン形式からUTC Dateに変換することです。私はBACKBONE.JS同期を使用するときに再び取得するには、このように

>>> var a = {myDate: new Date();} 
>>> JSON.stringify(a); 
>>> a 
"{"myDate":"2012-05-04T21:58:34.734Z"}" 

:ここに何が起こるかの例として

params.data = JSON.stringify(model.toJSON()); 

:私はBACKBONE.JSシンク内JSON.stringifyの使用に背中をトレースしています私のタイムゾーンはUTCに変換されます。代わりに元のローカルタイムゾーンを保存することをお勧めします。

私にとっては、データがUTCとしてデータベースに保存されていることは間違いありません。何とかして、それをローカルのタイムゾーンに戻すことができます。

すべての助けが必要です。

答えて

9

サーバとのすべての通信は、UTCで行う必要があります。JSON.stringifyは、あなたが望むことをやっています。欠落している部分は、サーバーから取得したUTCタイムスタンプをブラウザのローカルタイムゾーンに変換しているようです。model.parse(response)

解析は、モデルのデータが返されるたびに呼び出され

解析:それはあなたのモデルにparse実装を提供することにより、あなたのモデルに入る前に、サーバーのJSONを傍受することができます

サーバーではを取得し、を返し、を保存するとを保存します。関数は生のresponseオブジェクトを渡され、と設定された属性ハッシュをモデルでに戻す必要があります。デフォルトの実装はノーオペレーションで、単にJSONレスポンスを渡します。既存のAPIを使用する必要がある場合や、レスポンスのネームスペースを改善する必要がある場合は、これをオーバーライドします。あなたがちょうどあなたの地域のタイムゾーンにそれを変換する必要がありresponseにあなたのオブジェクト{myDate: '2012-05-04T21:58:34.734Z'}を取得します

return { myDate: d }; 

var d = new Date(Date.parse(response.myDate)); 
// Fri May 04 2012 14:58:34 GMT-0700 (PDT) 

あなたは、モデル内のDateオブジェクトをしたい場合は、あなただけのオブジェクトにラップ日付を返す必要があります。Date.parsenew Dateの迅速な組み合わせは、ブラウザのタイムゾーンであなたのDateオブジェクトを提供します

または、responseは、あなたは可能性がより多くのものがある場合:

response.myDate = d; 
return response; 
// or if you don't want to modify response 
return _({}).extend(response, { myDate: d }); 

あなたには、いくつかの理由で、ISO-8601 Sを望んでいた場合にブラウザのタイムゾーンを調べれば、標準のDateメソッドを使って簡単に構築できます。私はあなたがDateオブジェクトを保持する方が良いと思う、それは文字列よりはるかに便利です。

+0

すごい答えです。ありがとうございました! – jsalonen

関連する問題