2012-10-19 11 views
5

私たちのアプリケーションは、JavaScript(jQuery)に大きく依存しています。したがって、多くの 'application/json'リクエストがあります。ASP.NET MVC - Javascriptアプリケーションの日付を処理する最善の方法

私たちはしばらくの間、日付に苦労していましたが、私たちの努力にもかかわらず、 はASP.NET MVCアプリケーションでそれを処理する方法を理解できませんでした。私たちが望むものをここで

  1. シリアル化/(好ましくはDateTimeKind.Utcで)サーバ側でDateTimeオブジェクトをデシリアライズ。
  2. クライアント側でDateオブジェクトを操作します。 UTCで作業してください。何らかの形で日付をフォーマットします。ここで

が問題となっている:

  1. 日クライアントオブジェクトは、エンドユーザーのタイムゾーンに常にあります。 JSON.stringify(new Date())は自動的にシフトを行います。

    JSON Stringify changes time of date because of UTC

    この質問ヘルパービットが、我々はそれをサーバーに送信する前に、日付をシフトするために覚えておく必要があります。 JSONが日付を認識していないことはわかっていますが、JSON.parseのアナログを使って日付を解析するといいでしょう。new Date('2012-10-19T10:23:47.778Z')

  2. は、私たちは、ニュートンJson.netは/デシリアライズの日付をシリアル化するために使用しますが、それはDateTimeKind.Unspecifiedでそれをしない

質問:

で動作するようにエレガントな方法がありますサーバーと クライアントの両方の日付? アプリケーション全体でクロスカットの必要があります。

UPD:

私はより明確にそれを入れていました。私たちのアプリケーションでは、私たちは日付だけで動作するので、クライアントタイムゾーンを考慮する必要はありません。

サーバが2012-10-19T10:23:47.778Z'を返すのであれば、我々はDateオブジェクトを必要とする:

Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)

ない

Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time)(日がずれている)

+0

'JSON.stringify'は*を* UTCに変換しませんか? – James

+0

これらの問題を自分で経験した後、次のような人が私に尋ねました。「クライアント上にオブジェクトそのものが必要なのか、それとも正しい表記が必要なのか」彼は私の場合には正しかったし、正しい文化によってフォーマットされた正しい日付の文字列表記を返すことに決めました。 –

答えて

1

おそらく最良の方法は、よう時間値を送信することです1970-01-01T00:00:00Z(つまりUTC)以降のミリ秒であれば、new Date(timeValue)を実行するだけで、そのUTC時刻に設定された日付オブジェクトが存在します。クライアントシステムのタイムゾーン設定に基づいて日付と時刻が返されます。

あなただけの時間値を返送することができます(たとえば日追加)クライアント上でその日付オブジェクトとあなたが混乱する場合

alert(new Date(0)); // Thu Jan 01 1970 10:00:00 GMT+1000 (EST) 

:私のために

var timeValue = 1350518400000; // 2012-20-18T00:00:00Z 
var date = new Date(timeValue); 
alert(date);     // 2012-10-18T10:00:00UTC+1000 

// add a day 
date.setDate(date.getDate() + 1); 
alert(date.getTime());   // 1350604800000 

は、第二から第一TIMEVALUEを減算し、あなたは86400000を取得します。これは1日のミリ秒です(日が夏時間の変更境界を横切る場合はどちらかの時間になります)。あなたが好きなものは、サーバー上の時間値で行い、数値として保持するか、日付文字列に変換します。

+0

1つは.NET DateTimeエポックで、目盛りはJavaScriptのものとは異なります。 https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspxおよびhttp://stackoverflow.com/questions/7966559/how-to-convert-javascript -date-object-to-ticks – Jasen

4

私は強く、ポスト、次の読書をお勧めします:

.toJSON()法上の近代的なブラウザを使用することにより

  • をクライアント側
  • JSONのシリアル接続を正しく設定することでサーバー側で(JsonNetFormatterIsoDateTimeConverter
関連する問題