2014-12-05 3 views
10

Введение:ASP.NET Анализировать DateTime результат от Ajax вызова яваскрипта Дата

У меня есть WebMethod на моей странице ASP.NET, который возвращает объект 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.

+0

попробуйте этот код на вашем веб-сайте Birthday = new DateTime (1988, 9, 13) .ToLongDateString(); –

+0

День рождения имеет тип DateTime, поэтому я не могу разобрать его на строку – Mivaweb

+0

Следуйте за этим [блогом] (http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx) – chridam

ответ

18

Использование ToJavaScriptDate() функция, которая делает это для вас:

Пример

function ToJavaScriptDate(value) { 
    var pattern = /Date\(([^)]+)\)/; 
    var results = pattern.exec(value); 
    var dt = new Date(parseFloat(results[1])); 
    return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear(); 
} 

Функция ToJavaScriptDate() принимает значение в/Дата (тики)/формат и возвращает строку даты в формате MM/dd/yyyy. Внутри функция ToJavaScriptDate() использует регулярное выражение, которое представляет шаблон/Date (([^)] +)) /. Метод exec() принимает значение исходной даты и тесты для соответствия в значении. Возвращаемое значение exec() - это массив. В этом случае второй элемент массива результатов (результаты 1) содержит галочки в исходной дате. Например, если исходное значение равно/Date (836418600000) /, то результаты 1 будут иметь значение 836418600000. На основе этого значения тиков формируется объект JavaScript Date. Объект Date имеет конструктор, который принимает число миллисекунд с 1 января 1970 года. Таким образом, dt содержит действительный объект JavaScript Date. Затем функция ToJavaScriptDate() форматирует дату как MM/dd/yyyy и возвращает вызывающему. Вы можете использовать функцию ToJavaScriptDate(), как показано ниже:

options.success = function (order) { 
alert("Required Date : " + ToJavaScriptDate(order.RequiredDate) + ", Shipped Date : " + ToJavaScriptDate(order.ShippedDate)); 
}; 

Хотя приведенный выше пример использует дату в формате дд/ММ/ГГГГ, вы можете использовать любой другой формат, как только объект Дата строится.

ссылка: Link

1

Вы можете попробовать это:

_$.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

Ваше решение работает и для меня! +1 – Mivaweb

1

Если вы открыты для использования другой библиотеки JavaScript:

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

+0

Это хорошо, если вы намереваетесь использовать дату/время в javascript ie. некоторые манипуляции –

1

Другой способ решения этой проблемы является новый элемент в своем классе человека, а затем использовать что. Пример

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 будет использовать правильное форматирование.

Смежные вопросы