2016-02-07 6 views
7

Co robię, pobieranie danych z bazy danych za pomocą ajax i pokazać go w polach tekstowych html dla celów aktualizacji. Poniżej znajduje się mój kod metody internetowej, skąd otrzymuję dane z powodzeniem.Jak analizować ciąg daty formatu JSON do formatu daty

[WebMethod] 
public static List<Employee> getEmployee() 
{ 
    var slist = new List<Employee>(); 
    var db = new BLUEPUMPKINEntities(); 
    slist = db.Employees.ToList(); 
    return slist; 
} 

Teraz, gdy otrzymuję dane z bazy danych, otrzymałem datę w tym formacie /Date(725828400000)/. Przeszukuję Google'a w celu przeanalizowania i konwersji formatu ciągu jsonów na datę html/javascript, a także użyj wtyczek innych firm, takich jak moment.js i jquery.ui, ale nie rozwiąż mojego problemu. Również tutaj dzielę się moim kodem, z którego otrzymuję dane z ajax w formacie json i pokazuję je na jquery datatable.

$.ajax({ 
    url: "Employees.aspx/getEmployee", 
    data: null, 
    contentType: "Application/json; charset=utf-8", 
    responseType: "json", 
    method: "POST", 
    success: function (response) { 
     //alert(response.d); 

     var jsonObject = response.d; 
     var result = jsonObject.map(function (item) { 
      //var date = new Date(item.EMP_DOB); 
      //var obj = Date.parse(date); 
      var result = []; 
      result.push(''); 
      result.push(item.EMP_FNAME); 
      result.push(item.EMP_MNAME); 
      result.push(item.EMP_LNAME); 
      result.push(item.EMP_EMAIL); 
      result.push(item.EMP_DOB); //this is my date column in my database from where date is in yyyy/mm/dd format 
      result.push(item.EMP_USERNAME); 
      result.push(item.EMP_PASSWORD); 
      result.push(item.ID); 
      return result; 
     }); 
     myTable.rows.add(result); // add to DataTable instance 
     myTable.draw(); 
    }, 
    error: function (xhr) { 
     alert(xhr.status); 
    }, 
    Failure: function (response) { 
     alert(response); 
    } 
}); 

Chcę daty w formacie mm/dd/rrrr. Proszę, pomóż mi rozwiązać mój problem.

+1

początku wysyłając datę ciąg ISO od serwer – charlietfl

Odpowiedz

5

Jeśli nie ma problemu z dodawaniem zależność, a następnie można dodać moment.js a to pomoże Ci do formatowania danych w dowolnym formacie jestem zakładając, że datę z serwera jest w tym formacie '/Date(725828400000)/'

var d = item.EMP_DOB; 
result.push(moment(Number(d.match(/\d+/)[0])).format('MM/DD/YYYY')); 

Jeśli nie jesteś w stanie dodać js chwilę, po czym można zrobić czegos potrzebowalem jak

var date = new Date(Number(d.match(/\d+/)[0])); 
var day = date.getDate(); 
day = day = (day < 10) ? ("0" + day) : day; 
var month = date.getMonth() + 1); 
month = (month < 10) ? ("0" + month) : month; 
var dateStr = day + "-" + month + "-" + date.getFullYear(); 
result.push(dateStr); 
+0

to nie będzie parsować formatu pokazanego w pytaniu – charlietfl

+0

@charlietfl Edytowałem swoją odpowiedź, myślałem, że otrzymuje poprawny łańcuch daty, ale format jest inny ent –

+0

Dzięki za właściwą odpowiedź. Działa mnie.Ale tutaj jest też jeden problem, który jest " 'Moment js nie dostęp do mojego zewnętrznego pliku ajaxcall. więc umieściłem metodę ajaxcall -> getEmployee() na zewnątrz z zewnętrznego pliku tak łatwo mogę uzyskać do niego dostęp z niego. Ale chcę uzyskać dostęp do mojej chwili() do mojej metody ajaxcall, ponieważ w tej metodzie umieszczam całą metodę ajaxową. –

0

Najłatwiej zrobić to poniżej (wymagane żadne js osoby trzeciej)

var data =from row in db.Employees.ToList() 
select new { 
    EMP_DOB=row.EMP_DOB.ToString(), row.EMP_FNAME,row.EMP_MNAME,row.EMP_LNAME 
    row.EMP_EMAIL,row.EMP_DOB,row.EMP_USERNAME,row.EMP_PASSWORD,row.ID 
}; 

Jeśli chcesz sformatować datę można użyć

var data =from row in db.Employees.ToList() 
    select new { 
     EMP_DOB=Convert.ToString(row.EMP_DOB).ToShortDateString(), other properties goes here as shown previously 
    }; 

wil być w stanie go cokolwiek chcesz przy użyciu C# formatować

+0

Dziękuję za Twój komentarz, ale twoja odpowiedź nie działa dla mnie. –

+0

To podkreślanie błędu na 'row.EMP_DOB.ToString()', Niepoprawny declartor członka typu anonimowego. Anonimowi członkowie typu muszą być zadeklarowani z przydziałem członków, prostą nazwą lub dostępem do członków. –

+0

Właśnie zredagowałem swoją odpowiedź, byłem na zewnątrz, więc nie mogłem odpowiedzieć. Możesz sprawdzić, czy chcesz. Nie musisz nic robić po stronie klienta –

-1
var dbDate = "2014/03/12";  
var date = new Date(dbDate); 

// zamiast zakodowanego na stałe data Skieruj string

Dla Twojej sprawy otrzymujesz długą wartość jako ciąg od Db. Dodaj jeden więcej linii

var newDate = parseInt("725828400000"); // use here your item.EMP_DOB; 

teraz przekazać tę wartość do obiektu. Jak

var date = new Date(newDate); 


var mm = (date.getMonth()+1)>9?(date.getMonth()+1):"0"+(date.getMonth()+1); 
var dd = date.getDate()>9?date.getDate():"0"+date.getDate(); 
var yyyy = date.getFullYear(); 
var newDate = mm+"/"+"/"+dd+"/"+yyyy; 
alert(dbDate+" converted to "+newDate) 
+0

Otrzymuję datę na '/ Date (725828400000) /' ten format nie w tym "2014/03/12" –

+0

var date = new Date (item.EMP_DOB) // jego pokazuje mi błąd NaN –

+0

spróbuj tego: var newDate = parseInt ("725828400000"); // użyj tutaj swojej pozycji.EMP_DOB; Teraz przekaż tę wartość do obiektu. Podobnie jak var date = new Date (newDate); Przekazujesz długą wartość jako ciąg, dlatego nie możesz przeanalizować. – zakaiter

0

ta metoda konwersji WCF wszystkich dat typ do javascript obiektu Date:

var dateRegex = /^\/Date\((d|-|.*)\)[\/|\\]$/; 

function convertWCFStringDate(strDate) { 
    var matched = dateRegex.exec(strDate); 
    if (matched) { 
     var parts = matched[1].split(/[-+,.]/); 
     return new Date(parts[0] ? +parts[0] : 0 - +parts[1]); 
    } 
}