1. ホーム
  2. ジャバスクリプト

[解決済み】ASP.NET MVC JsonResultの日付フォーマット

2022-04-06 16:13:30

質問

私は、単純にモデルのJsonResultを返すコントローラのアクションを持っています。そこで、私のメソッドでは、次のようなものを用意しています。

return new JsonResult(myModel);

これは、1つの問題を除いては、うまくいきます。モデルには日付のプロパティがあり、これはJsonの結果で次のように返されるようです。

"\/Date(1239018869048)\/"

日付はどのように扱えば、私が必要とする形式で返されるのでしょうか?あるいは、上記のフォーマットをスクリプトでどのように扱えばよいのでしょうか?

どのように解決するのですか?

を拡張するだけです。 casperOneの回答 .

は、その JSON仕様 は日付の値を考慮していません。MSは電話をかける必要があり、彼らが選んだ方法は、javascriptの文字列の表現にあるちょっとしたトリックを利用することでした。 決して にシリアライズされます(" \/" も "\/" にマッピングする必要があります)。

参照 http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2 をご覧ください ("JavaScriptリテラルからJSONへ" までスクロールダウン)。

<ブロッククオート

JSONの欠点の一つは 日付/時間リテラルがないこと。多くの を使用します。 このことを初めて知ったとき JSONに出会う。簡単な説明 (がないのは、(慰めになるかどうかはともかくとして 日付/時間リテラルは、JavaScript も持っていなかった。をサポートしています。 JavaScriptの日付と時刻の値は は、すべてDate オブジェクトを使用します。JSONを使用するほとんどのアプリケーションは したがって、データ形式として一般的に のどちらかを使用する傾向があります。 日付と時刻を表現するための数値 の値です。文字列を使用する場合 一般に、ISO 8601形式です。数値が使用される場合。 の代わりに、この値は通常 の数を意味します。 ミリ秒のユニバーサルコーディネート エポック(epoch)からUTC(UTC)時間(ここでエポックは 1970年1月1日午前0時と定義 (UTC)です。繰り返しになるが、これは単なる の規約であり、JSONの一部ではありません。 規格に準拠しています。データを交換する場合 他のアプリケーションと のドキュメントを確認する必要があります。 日付と時刻の値のエンコード方法 をJSONリテラルに含めることができます。例えば マイクロソフトのASP.NET AJAXは、どちらも使用していません。 のどちらかです。そうではなく .NET の DateTime 値を JSON文字列で、その中身は 文字列は /Date(ticks)/ で、ここで からのミリ秒を表します。 エポック(UTC)である。つまり、1989年11月29日。 4:55:30 AMはUTCで次のようにエンコードされます。 "\/Date(628318530718)\/".

解決策としては、パースすればいいのでは?

value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));

しかし、どこかでシリアライザが DateTime オブジェクトを new Date(xxx) の構文があります。それを掘り出してみる。


の第2パラメータは JSON.parse()reviver 関数で、値が返される前にどのように生成されるかを規定します。

以下は、日付の例である。

var parsed = JSON.parse(data, function(key, value) {
  if (typeof value === 'string') {
    var d = /\/Date\((\d*)\)\//.exec(value);
    return (d) ? new Date(+d[1]) : value;
  }
  return value;
});

のドキュメントを参照してください。 JSON.parse()