2016-09-30 20 views
0

jQueryを使用してASP.NET MVCアプリケーションにajaxリクエストを行い、 "成功"ハンドラでJson.NETを使用してシリアル化されたISO-8601形式のオブジェクトを受け取ります。 :

var firstParsedDate = new Date(response.MyDate); 
var secondParsedDate = new Date(response.MyDate); 

はすでに解析された日付とレスポンスオブジェクトを受信する方法はあります:私は、私はそれらを使用することができます前に、すべてのこれらの日付を変換し、手動で必要その後

response = { 
    FirstDate: "2001-11-11T00:00:00Z" 
    SecondDate: "2002-22-22T00:00:00Z" 
} 

? そうでない場合は、一度にすべてを解析できますか?

+0

どのように特定のプロパティが最新であるかどうかを判断するのでしょうか? JavaScriptは文字列として見ます。そのことを理解できれば、jQueryの['ajax'](http://api.jquery.com/jQuery.ajax/)設定、おそらく' convertters'プロパティで何かをすることができます。 'jQuery.parseJSON'。 –

+0

@MikeMcCaughan、ISO 8061正規表現を使用してレスポンスのすべての文字列をテストできます。この変換がajax設定を使用して実行できる場合は、素晴らしい解決策になります。 –

答えて

1

jQueryのeach()を使用して、各値に対して機能を実行できます。
デモンストレーションの目的で、私はtoString()を追加しました。

response = { 
 
    FirstDate: "2001-11-11T00:00:00Z", 
 
    SecondDate: "2002-22-22T00:00:00Z" 
 
} 
 

 
$.each(response,function(i, v) { 
 
    response[i]=new Date(v).toString(); 
 
}); 
 

 
console.log(response);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


ここでは無効な日付を除外しmap()を使用する代替例を示します

var response = { 
 
    FirstDate: "2001-11-11T00:00:00Z", 
 
    SecondDate: "2002-22-22T00:00:00Z", 
 
    ThirdDate: "1995-08-22T05:23Z", 
 
    }, 
 

 
    valid_dates = $.map(response, function(v, i) { 
 
    return Date.parse(v) ? new Date(v).toString() : null; 
 
    }); 
 

 
console.log(valid_dates);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

レスポンスにDate以外のプロパティがある場合、それらは無効なDateオブジェクトに設定されます... –

1

あなたが再を作ることができますレスポンスオブジェクトを通過し、ISO 8601形式に一致する任意の文字列をDateオブジェクトに自動的に変換します。このような何かが動作するはずです:

function replaceIso8601StringsWithDates(obj) 
{ 
    if (obj !== null && typeof (obj) === "object" && !Array.isArray(obj)) { 
     for (var prop in obj) { 
      if (isIso8601String(obj[prop])) { 
       obj[prop] = new Date(obj[prop]); 
      } 
      else { 
       replaceIso8601StringsWithDates(obj[prop]); 
      } 
     } 
    } 
} 

var iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6})?(Z|[+-]\d{2}:\d{2})$/; 
function isIso8601String(val) { 
    return typeof (val) === "string" && iso8601Regex.test(val); 
} 

を次に、あなただけの関数を呼び出す必要があり、あなたのsuccessハンドラで:

function success(data, status, xhr) { 
    replaceIso8601StringsWithDates(data); 
    ... 
} 
関連する問題