首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET解析DateTime调用javascript日期的结果

ASP.NET解析DateTime调用javascript日期的结果
EN

Stack Overflow用户
提问于 2014-12-05 11:15:19
回答 4查看 23.8K关注 0票数 15

简介:

我的ASP.NET页面上有一个ASP.NET,它返回一个Person对象。其中一个字段是Birthday,它是DateTime属性。

WebMethod

代码语言:javascript
运行
复制
[WebMethod]
public static Person GetPerson()
{
     Person p = new Person() {
         Id = 1,
         Name = "Test",
         Birthday = new DateTime(1988, 9, 13)
     };

     return p;
}

如果我使用$.ajax()进行调用,就会得到服务器的响应和Person对象。

Ajax调用

代码语言:javascript
运行
复制
// 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)));
            }
        });
    }
});

结果:

代码语言:javascript
运行
复制
{"__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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-05 11:42:48

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

代码语言:javascript
运行
复制
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对象有一个构造函数,它接受1970年1月1日以来的毫秒数。

因此,dt持有一个有效的JavaScript日期对象。

然后,convertToJavaScriptDate()函数将日期格式化为MM/dd/yyyy,并返回给调用者。

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

代码语言:javascript
运行
复制
options.success = function (order) {
 alert("Required Date : " + convertToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + convertToJavaScriptDate(order.ShippedDate));
};

尽管上面的示例以MM/dd/yyyy格式使用日期,但一旦构造了date对象,您也可以使用其他格式。

参考资料:链接

票数 25
EN

Stack Overflow用户

发布于 2014-12-05 11:29:05

你可以试试这个:

代码语言:javascript
运行
复制
   _$.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

票数 1
EN

Stack Overflow用户

发布于 2015-03-17 14:22:14

如果您开放使用另一个JavaScript库:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27314663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档