2011-12-18 10 views
1

サーバーとユーザーの形式が異なる場合、ajax、javascript、およびMVC 3の日付形式を表す最も良い方法は何ですか。どのように同期するのですか?ajaxの日付形式

+0

私は、最良の意見は、ISO 8601のサーバー側のDateTimeに使用することです。 –

+0

あなたがdatetime.minvalueを返すとbecarefulの1つは、タイムゾーンから減算することです。それはかなりの助言を引き起こす可能性があります。日付の出力を考慮しながら、タルトについて考えることをお勧めします。 datetime.maxで+タイムゾーンが発生すると思います。 – Dessus

答えて

3

AJAXリクエストへの応答としてクライアントに日付情報を送信する場合は、JSONにシリアライズされていることを確認してください。これは、サーバーとクライアント間でメッセージを交換する合意されたフォーマットであり、JavaScript 。残念ながら、JSONでは日付の書式設定に関するルールは提供されていません。

.NETでは、JavaScriptSerializerクラスを使用してオブジェクトをJSONにシリアル化できます。それを使用する場合は、DateTime構造体をシリアル化して処理します。 MSDNの詳細については、Stand-Alone JSON Serializationを参照してください。 「\ /日(:それはこれであるために降りてくる何ASP.NETを使用していない場合は、日時型が特殊な形式の 文字列としてJSONで表現されて

...

+ 0500 700000)\//日(+ 0500 700000)」

日時値が の形でJSON文字列として表示され、 "/"、最初の番号(提供された例 で700000)の数でありますGMTタイムゾーンのミリ秒単位(通常は)(夏時間以外の)時間は、1970年1月1日の深夜からです。 の数値は、以前の時刻を表すために負の値になることがあります。この例では が "+0500"で構成されている部分はオプションで、 の時刻がローカルの種類であることを示しています。つまり、デシリアライズ時にローカルの タイムゾーンに変換する必要があります。存在しない場合、時間は であり、Utcとしてデシリアライズされます。

スラッシュは両方ともエスケープされています。その場合にのみ、文字列を日付として解釈する必要があります。そうでない場合は、ちょっと変わった文字列として解釈する必要があります。

これをJavaScriptでどのように逆シリアル化しますか?

var date = new Date(parseInt(value.substr(6))); 
// parseInt will pick up the integer value 
// The Date constructor understands the value as milliseconds from 1/1/1970 

それともevalを使用する(一部は「悪」とみなさ)と値にいくつかのJavaScriptを挿入することができます:あります

var date = eval("new " + value.slice(1, -1)); 
// effectively eval("new Date(1234567)") 

何のタイムゾーン・コンポーネントが存在しない場合、それはのような単純なことができ同様に、この程度のStackOverflowに関する質問がたくさん:

そして最後に、.NETのための理論的根拠を説明し、MicrosoftのBetrandリロイから良いブログ記事:

Dates and JSON

だから私のアドバイスはその形式に固執することです。NETはデフォルトで使用され、タイムゾーンも処理する必要がある場合でも、常に正しい処理方法を見つけることができます。あなたが何をするにしても、あなた自身のフォーマットを発明しないでください!

PS。 ASP.NET MVC 3から、JSONへのバインドもモデル化できるので、JSONをコントローラアクションにも送信できます。