【问题标题】:Convert Json date string to JavaScript date object将 Json 日期字符串转换为 JavaScript 日期对象
【发布时间】:2011-03-07 02:17:29
【问题描述】:

我有以下 JSON 对象,其中包含以下格式的日期字段:

{
    "AlertDate": "\/Date(1277334000000+0100)\/",
    "Progress": 1,
    "ReviewPeriod": 12 
}

我想写一个正则表达式或者一个函数把它转换成一个javascript对象,这样它就变成了:

{
    "AlertDate": new Date(1277334000000),
    "Progress": 1,
    "ReviewPeriod": 12 
}

上述日期格式在 JQuery parseJSON 方法中验证失败。

我想将 1277334000000+0100 转换为正确的毫秒数,以便在验证后调用 eval 时创建正确的日期。

谁能帮助我解决这个问题?

【问题讨论】:

  • 我想你写了两次"AlertDate":

标签: javascript regex json


【解决方案1】:

除非你真的需要,否则你真的不应该使用 eval;为什么不直接在 JSON 中包含秒数,并在需要格式化时调用该数字的 Date?

如果必须,可以使用正则表达式从字符串中解析出数字

【讨论】:

    【解决方案2】:

    这是你要找的吗?

    如果这是您对象中的一项: o = { "AlertDate": "/Date(1277334000000+0100)/", “进度”:1、 “审查期”:12 }

    此代码将提取第一个值数字(忽略“+0100”),转换为数字并创建日期对象。

    var rxFirstNumber = /(\d+)/;
    var strAlertDate = o.AlertDate;
    var arrMatches,intTimeStamp;
    
    arrMatches = strAlertDate.match(rxFirstNumber);
    if (arrMatches !== null && arrMatches.length > 0) {
        intTimeStamp = parseInt(arrMatches[1],10);
        o.AlertDate = new Date(intTimeStamp);
    }
    

    如果您可以相信您的数据始终包含该字符串数据(或至少该 AlertDate 将始终是一个包含数字的字符串),则可以用一行(讨厌且不可维护的)代码来表示:

    o.AlertDate = new Date(parseInt(o.AlertDate.match(/(\d+)/)[1],10));
    

    【讨论】:

      【解决方案3】:

      我需要一个更全面的答案,而不仅仅是更改单个属性的日期。

      我需要更改 JSON 字符串中的所有日期,而不仅仅是一个属性。

      我最终得到了以下正则表达式

      data = data.replace(new RegExp('\\"\\\\\/Date\\((\\d{13}\\+\\d{4})\\)\\\\\/\\"', 'g'), "new Date($1)");
      

      【讨论】:

        【解决方案4】:

        自动解析日期的可重用 jQuery 扩展

        我编写了一个 jQuery 扩展(如果你确实使用了,我希望/建议你这样做),它改变了 $.parseJSON() 的功能,因此它能够为你自动解析日期。不再需要重复代码来解析日期。

        用代码检查my blog post

        【讨论】:

          【解决方案5】:

          您好,我只想添加到 BalusC 答案:

          如果您希望某些较旧日期的日期不被未定义,而不是

          json.AlertDate = new Date(parseInt(json.AlertDate.replace(/(^.*\()|([+-].*$)/g, '')));
          

          你可以:

          var dateObject = new Date(new Number(yourDateVariable.replace(/(^.*\()|([+-].*$)/g, '')));
          

          【讨论】:

            猜你喜欢
            • 2022-07-20
            • 2020-05-21
            • 2020-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-31
            • 2012-01-28
            相关资源
            最近更新 更多