Javascript 解析包含日期的JSON数据会创建错误的日期对象
我使用数据类型为“json”的jQuery1.4.2进行ajax调用Javascript 解析包含日期的JSON数据会创建错误的日期对象,javascript,jquery,json,datetime,Javascript,Jquery,Json,Datetime,我使用数据类型为“json”的jQuery1.4.2进行ajax调用 $.ajax({ url: url_with_json_formated_response, data: jsonOptions, dataType: 'json', error: function(XMLHttpRequest, textStatus, errorThrown){ alert('una
$.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)(粘贴式chrome控制台)
我想为我创建日期对象的jSON解析有问题。有什么线索吗?当我尝试创建一个值为
2010-10-25T10:00:00-07:00的日期时,我收到一个“无效日期”错误。这是一个格式错误的日期字符串
1970年是解析器工作不正常的一年
当我尝试使用值创建日期时,您可以尝试返回类似于2010-10-25T10:00:00 GMT-0700
的内容。我收到一个“无效日期”错误。这是一个格式错误的日期字符串
1970年是解析器工作不正常的一年
也许您可以尝试返回类似于2010-10-25T10:00:00 GMT-0700
的内容。不幸的是,并非所有浏览器的JavaScript引擎(包括Chrome)都支持此格式。有关详细信息,请参阅此问题:
您将需要,我已经包含了一个示例,使用下面的链接后面的代码使用您的数据:
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);
您的日期位于。不幸的是,并非所有浏览器的JavaScript引擎(包括Chrome)都支持此格式。有关详细信息,请参阅此问题:
您将需要,我已经包含了一个示例,使用下面的链接后面的代码使用您的数据:
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);
该库非常擅长以各种格式解析日期,并使用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();
该库非常擅长以各种格式解析日期,并使用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();