ASP.NET解析对javascript日期的ajax调用的日期时间结果
简介: 我的ASP.NET页面上有一个ASP.NET解析对javascript日期的ajax调用的日期时间结果,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,简介: 我的ASP.NET页面上有一个WebMethod,它返回一个Person对象。 其中一个字段是生日,它是日期时间属性 WebMethod 如果我使用$.ajax()进行调用,我将使用Person对象获得服务器的响应 Ajax调用 结果: 问题 如何将生日[/Date(59010480000)/]解析为javascript/jQuery日期? 我尝试了新日期(Date.parse(data.d.birth))但它给了我一个无效日期您可以尝试以下方法: _$.ajax({
WebMethod
,它返回一个Person
对象。
其中一个字段是生日
,它是日期时间
属性
WebMethod
如果我使用$.ajax()
进行调用,我将使用Person
对象获得服务器的响应
Ajax调用
结果:
问题
如何将生日[/Date(59010480000)/]解析为javascript/jQuery日期?
我尝试了新日期(Date.parse(data.d.birth))
但它给了我一个无效日期
您可以尝试以下方法:
_$.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);
}
});
使用convertToJavaScriptDate()
函数为您执行以下操作:
[WebMethod]
public static Person GetPerson()
{
Person p = new Person() {
Id = 1,
Name = "Test",
Birthday = new DateTime(1988, 9, 13)
};
return p;
}
// 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)/"}
函数convertToJavaScriptDate(值){
var模式=/Date\([^)]+)\/;
var结果=pattern.exec(值);
var dt=新日期(结果[1]);
返回(dt.getMonth()+1)+“/”+dt.getDate()+“/”+dt.getFullYear();
}
convertToJavaScriptDate()
函数接受\/Date(ticks)\/
格式的值,并返回MM/dd/yyyy
格式的日期字符串。
在内部,convertToJavaScriptDate()
函数使用一个正则表达式来表示模式/Date\([^)]+)\/
exec()
方法接受源日期值并测试该值是否匹配。exec()
的返回值是一个数组。在这种情况下,结果数组的第二个元素(results[1]
)保存源日期的刻度部分
例如,如果源值是\/Date(836418600000)\/
,则结果[1]
将是836418600000
基于此ticks值,将形成一个JavaScript日期对象。Date对象的构造函数接受自1970年1月1日以来的毫秒数。
因此,dt
持有有效的JavaScript日期对象。
然后,convertToJavaScriptDate()
函数将日期格式化为MM/dd/yyyy
,并返回给调用者
您可以使用convertToJavaScriptDate()
函数,如下所示:
options.success = function (order) {
alert("Required Date : " + convertToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + convertToJavaScriptDate(order.ShippedDate));
};
尽管上面的示例使用的是MM/dd/yyyy
格式的日期,但一旦构建了日期对象,您也可以使用其他格式
参考:如果您愿意使用其他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")
}}
}
我认为这将是最好的方式,因为所有的格式化都在一个地方,在可能的情况下,您可以使用。
[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:dd/MM/YYYY}”)]
在生日元素上方,这样displayFor将使用正确的格式 在webmethod Birthday=new DateTime(1988,9,13)中尝试此代码;生日是DateTime类型,所以我无法将其解析为字符串。如果你想发布答案,那么@ArunPrasanth就像一个符咒!如果您打算在javascript ie中使用日期/时间,这是很好的。一些操作这里是包含时间的版本:function to JavaScriptDateTime(value){var pattern=/date\([^)]+)\/;var results=pattern.exec(value);var dt=new date(parseFloat(results[1]);return dt.getHours()+:“+dt.getMinutes()+“”+('0'+dt.getDate()).slice(-2)+“+('0'+(dt.getMonth()+1)).slice(-2)+“+dt.getFullYear();}
我刚刚尝试了你的方法,我在jQuery中遇到了一个错误。延迟的异常:无法读取null类型的属性“1”。错误:无法读取null类型的属性“1”。你能给我提供一个JSFIDLE吗??