我使用带有dataType:'json'的jQuery 1.4.2进行ajax调用。
$.ajax({
url: url_with_json_formated_response,
data: jsonOptions,
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown){
alert('unable to get data, error:' + textStatus);
},
success: function(data) {
console.log(data);
});
如果我查看xhr响应,我会得到以下结果。
{"events":[{"start":"2010-10-25T10:00:00-07:00","label_color":"","kind":"availability","end":"2010-10-25T20:00:00-07:00","recurrence":"monday","body":"some body text","title":"some title text","id":"1492"}]}
但是,jquery为我格式化的json对象(console.log(data),有错误的日期对象,接近1970年,就像 1970年1月1日星期四23:00:00 GMT + 0200(EET)(粘贴形式的铬控制台)
我认为为我创建Date对象的jSON解析有问题。任何线索?
答案 0 :(得分:1)
您的日期在ISO-8601 format。不幸的是,并非所有浏览器的JavaScript引擎(包括Chrome)都支持此格式。有关详细信息,请参阅此问题:
Does Javascript/EcmaScript3 support ISO8601 date parsing?
您需要parse the value using JavaScript,我已经使用您的数据使用下面此链接背后的代码包含了一个示例:
var json = {"events":[{"start":"2010-10-25T10:00:00-07:00","label_color":"","kind":"availability","end":"2010-10-25T20:00:00-07:00","recurrence":"monday","body":"some body text","title":"some title text","id":"1492"}]};
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
}
var start = new Date();
start.setISO8601('2010-10-25T10:00:00-07:00');
alert(start);
答案 1 :(得分:0)
当我尝试使用值2010-10-25T10:00:00-07:00
创建日期时,出现“无效日期”错误。这是一个格式错误的日期字符串。
1970年的一年是解析器无法正常工作的赠品。
也许您可以尝试返回2010-10-25T10:00:00 GMT-0700
答案 2 :(得分:0)
库moment.js非常擅长以各种格式解析日期,并使用ISO8601作为默认值。它适用于所有浏览器。您可以像这样使用它:
var m = moment("2010-10-25T10:00:00-07:00");
// example of re-formatting it as a string
var s = m.format("MM/DD/YYYY h:mm:ss a");
// example of getting back to a Date object
var date = m.toDate();