2012-10-12 6 views
4

ajax를 통해 일부 데이터를로드하고 날짜를 자동으로 파싱하려고합니다.jquery ajax 요청에 대한 JSON 날짜 형식

var url = "http://example.com/report_containing_dates.json" 
jQuery.getJSON(url, function(data_containing_dates_and_strings){ 
    console.log(date); 
}); 

내 JSON의 날짜 형식은 "2012년 9월 28일"(레일에서 기본값은 to_json)하지만 jQuery를 그냥이 문자열 처리합니다. jquery가 날짜로 해석해야하는 날짜 형식은 무엇입니까?

샘플 응답 :

{ 
    "columns": [ 
    ["date", "Date"], 
    ["number", "active_users"], 
    ], 
    "rows": [ 
    ["2012-09-28", 120, 98, 60], 
    ["2012-09-29", 127, 107, 63] 
    ] 
} 

답변

1

OK, 예상보다 훨씬 어려웠지만 해결책이 있습니다.

내가 취한 접근법은 ajax 요청에서 사용자 지정 데이터 형식을 요청한 다음 사용자 지정 변환기를 구현하는 것입니다. 그때 변환기를 등록

{ 
    "columns": [ 
    ["date", "Date"], 
    ["number", "active_users"], 
    ], 
    "rows": [ 
    ["date(2012-09-28)", 120, 98, 60], 
    ["date(2012-09-29)", 127, 107, 63] 
    ] 
} 

: 같은

내 JSON에서 날짜를 사용하고 모든 형식의

먼저 날짜 ('YYYY-MM-DD') 이제, 원래의 예를 보일 것이다 텍스트를 json_with_dates라는 사용자 정의 데이터 유형으로 변환합니다. 정규식은 날짜 형식을 검색하고 날짜 형식을 만드는 명령문으로 바꾸는 데 사용됩니다. 그런 다음 Eval을 사용하여 json을 구성합니다.

jQuery.ajaxSetup({ 
    converters: { 
    "text json_with_dates": function(text) { 

     var with_dates = text.replace(/\"date\(([^)]*)\)\"/g, function(a, date){ 
     var dateParts = date.split("-"); 
     return "new Date(" + dateParts[0] + "," + dateParts[1] + "," + dateParts[2] + ")"; 
     }); 

     var converted = eval("(" + with_dates + ")"); 
     return converted; 
    } 
    } 
}); 

I는 사용자 정의 데이터 형식에 대한 아약스 요청합니다

$.ajax({ 
    url: div.data('chart'), 
    dataType: 'json_with_dates', 
    success: function(data_including_dates){ 
     console.log("win!"); 
    } 
}); 
5

날짜 문자열의 형식은 중요하지 않습니다. JSON 메서드는 자동으로 해당 객체를 Date 객체로 변환하지 않습니다. JSON은 Number, String, Boolean, Array, Objectnull 만 지원합니다. (http://en.wikipedia.org/wiki/JSON)

이 날짜 문자열을 직접 Date 개의 개체로 변환해야합니다.

$.each(response.rows, function (idx, row) { 

    row[0] = Date.parse(row[0]); 
} 
0

그것은 날짜를 직접 분석하는 것이 최선이 될 수 있습니다 뭔가를 할 수 귀하의 경우에는

. 필자는 예상대로 문자열에서 날짜를 파싱하지 않는 특정 브라우저에서 문제를 겪었습니다. 다음은 문자열 2012-09-28에서 사용할 수있는 빠른 프로토 타입입니다 : IE JavaScript date parsing error

다음 Date.parse 방법은 구현에 의존 (새 가 완전히 : 비슷한 질문에서 촬영

String.prototype.parseDate = function(){ 
    var date = this.split("-"); 
    var yyyy = date[0]; 
    var mm = date[1]; 
    var dd = date[2]; 

    date = new Date(yyyy,mm,dd); 
    date.setMonth(date.getMonth()-1); // since Months are 0 based 
    return date; 
} 

console.log(data.rows[0][0].parseDate()); 
console.log(data.rows[1][0].parseDate());​ 

EXAMPLE

Date (문자열)은 Date.parse (문자열)과 같습니다.