Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析包含日期的JSON数据会创建错误的日期对象_Javascript_Jquery_Json_Datetime - Fatal编程技术网

Javascript 解析包含日期的JSON数据会创建错误的日期对象

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

我使用数据类型为“json”的jQuery1.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)(粘贴式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();