ASP.NET Parse DateTime是从ajax调用javascript日期的结果

介绍:

我的ASP.NET页面上有一个WebMethod ,它返回一个Person对象。 其中一个字段是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

使用ToJavaScriptDate()函数为您执行此操作:

 function ToJavaScriptDate(value) { var pattern = /Date\(([^)]+)\)/; var results = pattern.exec(value); var dt = new Date(parseFloat(results[1])); return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear(); } 

ToJavaScriptDate()函数接受\/Date(ticks)\/ format中的值,并以MM/dd/yyyy格式返回日期字符串。
在内部, ToJavaScriptDate()函数使用表示模式/Date\(([^)]+)\)/的正则表达式。
exec()方法接受源日期值并测试值中的匹配项。 exec()的返回值是一个数组。 在这种情况下,结果数组的第二个元素( results[1] )保存源日期的刻度部分。

例如,如果源值为\/Date(836418600000)\/results[1]将为836418600000
基于此刻度值,形成JavaScript Date对象。 Date对象有一个构造函数,它接受自1970年1月1日以来的毫秒数。
因此, dt拥有有效的JavaScript Date对象。
然后, ToJavaScriptDate()函数将日期格式化为MM/dd/yyyy并返回给调用者。

您可以使用ToJavaScriptDate()函数,如下所示:

 options.success = function (order) { alert("Required Date : " + ToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + ToJavaScriptDate(order.ShippedDate)); }; 

虽然上面的示例使用MM/dd/yyyy格式的日期,但是一旦构造了Date对象,您就可以自由地使用任何其他格式。

参考: 链接

你可以试试这个:

  _$.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); } }); 

的jsfiddle

如果您愿意使用其他JavaScript库:

http://momentjs.com/docs/#/parsing/asp-net-json-date/

解决此问题的另一种方法是在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") }} } 

我原本以为这将是最好的方式,因为所有的格式都在一个地方,你可以使用。 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/YYYY}")]

在Birthday元素上方,以便displayFor将使用正确的格式。