从 ajax 调用到 javascript 日期的 ASP.NET 解析 DateTime 结果
Posted
技术标签:
【中文标题】从 ajax 调用到 javascript 日期的 ASP.NET 解析 DateTime 结果【英文标题】:ASP.NET Parse DateTime result from ajax call to javascript date 【发布时间】:2015-02-03 13:13:09 【问题描述】:简介:
我的 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
。
【问题讨论】:
在你的 webmethod 中试试这个代码 Birthday = new DateTime(1988, 9, 13).ToLongDateString(); 生日是 DateTime 类型,所以我无法将其解析为字符串 关注blog @ArunPrasanth 就像一个魅力,如果你想为它发布答案! 【参考方案1】:使用为您执行此操作的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对象,你也可以使用其他格式。
参考:Link
【讨论】:
这是包含时间的版本:function ToJavaScriptDateTime(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.Deferred 异常:无法读取 null 的属性 '1' 类型错误:无法读取 null 的属性 '1'
你能给我一个jsfiddle吗??【参考方案2】:
解决这个问题的另一种方法是在你的 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 将使用正确的格式。
【讨论】:
【参考方案3】:如果您愿意使用其他 JavaScript 库:
http://momentjs.com/docs/#/parsing/asp-net-json-date/
【讨论】:
这很好,如果您打算在 javascript 中使用日期/时间,即。一些操作【参考方案4】:你可以试试这个:
_$.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
【讨论】:
以上是关于从 ajax 调用到 javascript 日期的 ASP.NET 解析 DateTime 结果的主要内容,如果未能解决你的问题,请参考以下文章
如何设置默认日期参数以传递给 JavaScript 中的 ajax get 调用,在选择日期值时它应该更改
使用ajax调用从javascript保存txt文件到PHP
从节点 JavaScript 返回到 jQuery 的 Ajax 调用落在错误函数上