ASP.NET 从 ajax 调用到 javascript date 解析 DateTime 结果
本文关键字:date 解析 DateTime 结果 javascript NET ajax 调用 ASP | 更新日期: 2023-09-27 18:33:23
简介:
我的 ASP.NET 页面上有一个返回Person
对象的WebMethod
。其中一个字段是Birthday
,这是一个DateTime
属性。
网络方法
[WebMethod]
public static Person GetPerson()
{
Person p = new Person() {
Id = 1,
Name = "Test",
Birthday = new DateTime(1988, 9, 13)
};
return p;
}
如果我使用 $.ajax()
进行调用,我会得到服务器对 Person
对象的响应。
阿贾克斯调用
// 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)/"}
问题
如何将 [/Date(590104800000(/] Birthday
解析为 javascript/jQuery date?我试过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()
的返回值是一个数组。在这种情况下,结果数组的第二个元素(results[1]
(保存源日期的即时报价部分。
例如,如果源值为 '/Date(836418600000)'/
则results[1]
836418600000
。
基于这个刻度值,形成一个 JavaScript Date 对象。Date 对象有一个构造函数,该构造函数接受自 1970 年 1 月 1 日以来的毫秒数。
因此dt
保存一个有效的 JavaScript Date 对象。
然后,convertToJavaScriptDate()
函数将日期的格式设置为MM/dd/yyyy
并返回给调用方。
您可以使用convertToJavaScriptDate()
函数,如下所示:
options.success = function (order) {
alert("Required Date : " + convertToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + convertToJavaScriptDate(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 将使用正确的格式。