5

私たちのアプリケーションは、javascript (jQuery) に大きく依存しています。そのため、「application/json」リクエストがたくさんあります。

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

ここで私たちが欲しいもの:

  1. サーバー側で DateTime オブジェクトをシリアライズ/デシリアライズします (DateTimeKind.Utc を使用することをお勧めします)。
  2. クライアント側で Date オブジェクトを操作します。UTC で作業します。何らかの形で日付をフォーマットします。

ここに問題があります:

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

    JSON Stringify は UTC のために日時を変更します

    この質問は少しヘルパーですが、サーバーに送信する前に日付をシフトすることを忘れないでください。new Date('2012-10-19T10:23:47.778Z') JSON が日付を認識しないことはわかっていますが、日付を解析する JSON.parse の類似物があると便利です。

  2. Newton Json.net を使用して日付をシリアル化/逆シリアル化しますが、DateTimeKind.Unspecified で実行します

質問:

サーバーとクライアントの両方で日付を操作するエレガントな方法はありますか? アプリケーション全体の横断的なものとして必要です。

更新:

もっと明確に言う必要がありました。このアプリケーションでは、日付のみを操作するため、クライアントのタイム ゾーンを考慮する必要はありません。

したがって、サーバーが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)(日付がずれています)

4

2 に答える 2

4

次の投稿を読むことを強くお勧めします。

これは、ISO 日付を使用する必要があるという一般的な結論につながります。

  • .toJSON()クライアント側で最新のブラウザ方式を使用する
  • サーバー側で JSON シリアライゼーションを適切に構成することにより ( JsonNetFormatterwith IsoDateTimeConverter)
于 2012-10-19T11:13:11.367 に答える
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)

クライアントでその日付オブジェクトを台無しにした場合 (たとえば、1 日を追加した場合)、時間の値を送り返すことができます。

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 を引くと、1 日のミリ秒である 86400000 が得られます (その日が夏時間の境界を越える場合は、どちらの方法でも 1 時間になります)。サーバーで時間の値を好きなように処理し、数値として保持するか、日付文字列に変換します。

于 2012-10-19T11:04:46.430 に答える