2012-10-12 180 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-09-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

好的,這比預期的難得多,但我確實有一個解決方案。

我採取的方法是要求ajax請求中的自定義數據類型,然後實現自定義轉換器。

我使用我的JSON日期的全格式的首先是現在日期(「YYYY-MM-DD」),最初的例子看起來像:

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

我然後註冊一個轉換器將文本轉換爲名爲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; 
    } 
    } 
}); 

我然後進行自定義數據類型Ajax請求:

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

無論你如何格式化日期字符串。 JSON方法永遠不會自動將其轉換爲Date對象。 JSON僅支持以下基本類型:NumberString,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使用:

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.parse方法完全依賴於實現(新 日期(字符串)相當於Date.parse(字符串))