はじめに:
ASP.NETページにWebMethod
オブジェクトを返すPerson
があります。フィールドの1つは、Birthday
プロパティであるDateTime
です。
WebMethod
_[WebMethod]
public static Person GetPerson()
{
Person p = new Person() {
Id = 1,
Name = "Test",
Birthday = new DateTime(1988, 9, 13)
};
return p;
}
_
$.ajax()
を使用して呼び出しを行うと、Person
オブジェクトを使用してサーバーの応答を取得します。
Ajax呼び出し
_// Class instance
var Ajaxcalls = function () {
}
_$.extend(Ajaxcalls, {
GetPerson: function (label) {
var self = label instanceof _$ ? label : $(label);
_$.ajax({
url: 'Default.aspx/GetPerson',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(JSON.stringify(data.d));
self.html(new Date(Date.parse(data.d.Birthday)));
}
});
}
});
_
結果:
_{"__type":"AjaxTest.Classes.Person","Id":1,"Name":"Test","Birthday":"/Date(590104800000)/"}
_
問題
Birthday
[/ Date(590104800000)/]をjavascript/jQueryの日付に解析するにはどうすればよいですか? new Date(Date.parse(data.d.Birthday))
を試しましたが、_Invalid date
_が表示されます。
これを行うconvertToJavaScriptDate()
関数を使用します。
_function convertToJavaScriptDate(value) {
var pattern = /Date\(([^)]+)\)/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
}
_
convertToJavaScriptDate()
関数は、\/Date(ticks)\/
形式の値を受け入れ、_MM/dd/yyyy
_形式の日付文字列を返します。
内部では、convertToJavaScriptDate()
関数はパターン/Date\(([^)]+)\)/
を表す正規表現を使用しています。exec()
メソッドは、ソース日付値を受け入れ、値の一致をテストします。 exec()
の戻り値は配列です。この場合、結果配列の2番目の要素(_results[1]
_)は、ソース日付のティック部分を保持します。
たとえば、ソース値が\/Date(836418600000)\/
の場合、_results[1]
_は_836418600000
_になります。
このティック値に基づいて、JavaScript Dateオブジェクトが形成されます。 Dateオブジェクトには、1970年1月1日からのミリ秒数を受け入れるコンストラクターがあります。
したがって、dt
は有効なJavaScriptDateオブジェクトを保持します。
次に、convertToJavaScriptDate()
関数が日付を_MM/dd/yyyy
_としてフォーマットし、呼び出し元に戻ります。
以下に示すように、convertToJavaScriptDate()
関数を使用できます。
_options.success = function (order) {
alert("Required Date : " + convertToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + convertToJavaScriptDate(order.ShippedDate));
};
_
上記の例では_MM/dd/yyyy
_形式の日付を使用していますが、Dateオブジェクトが作成されると、他の形式も使用できます。
参照: リンク
別のJavaScriptライブラリを使用する場合:
この問題に取り組む別の方法は、personクラスに新しい要素を作成し、それを使用することです。例
_public class Person {
public int Id {get;set;}
public string Name {get;set;}
public DateTime Birthday {get;set;}
public string BirthdayFormat { get {
return Birthday.toString("dd/MM/YYYY")
}}
}
_
すべてのフォーマットが1つの場所にあり、可能な場合は使用できるため、これが最善の方法だと思いました。 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/YYYY}")]
誕生日要素の上。displayForは正しいフォーマットを使用します。
あなたはこれを試すことができます:
_$.ajax({
url: 'Default.aspx/GetPerson',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(JSON.stringify(data.d));
var src = data.d.Birthday;
//Remove all non-numeric (except the plus)
src = src.replace(/[^0-9 +]/g, '');
//Create date
var birthDate = new Date(parseInt(src));
self.html(birthDate);
}
});