Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET解析对javascript日期的ajax调用的日期时间结果_Javascript_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

ASP.NET解析对javascript日期的ajax调用的日期时间结果

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({

简介:

我的ASP.NET页面上有一个
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吗??