我想通过ajax加载一些数据并自动解析日期。
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" (来自rails to_json的默认值)但是jQuery只是将它视为一个字符串。 jquery将日期解析为日期需要什么格式?
示例回复:
{
"columns": [
["date", "Date"],
["number", "active_users"],
],
"rows": [
["2012-09-28", 120, 98, 60],
["2012-09-29", 127, 107, 63]
]
}
答案 0 :(得分:5)
如何格式化日期字符串无关紧要。 JSON方法永远不会自动将其转换为Date
对象。 JSON仅支持以下基本类型:Number
,String
,Boolean
,Array
,Object
和null
。 (http://en.wikipedia.org/wiki/JSON)
您必须自己将这些日期字符串转换为Date
个对象。
在你的情况下可能是这样的:
$.each(response.rows, function (idx, row) {
row[0] = Date.parse(row[0]);
}
答案 1 :(得分:2)
使用Date.parse,它将从字符串转换为日期。
答案 2 :(得分: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!");
}
});
答案 3 :(得分: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 强>
取自类似问题:IE JavaScript date parsing error
Date.parse方法完全依赖于实现(new Date(string)等同于Date.parse(string))