将Json日期字符串转换为JavaScript日期对象

时间:2010-06-22 23:52:38

标签: javascript regex json

我有以下JSON对象,其日期字段格式如下:

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

我想编写一个正则表达式或函数将其转换为javascript对象,使其形式为:

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

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

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

任何人都可以帮助我解决这个问题吗?

5 个答案:

答案 0 :(得分:1)

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

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

使用代码检查my blog post

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这是你要找的吗?

如果这是您对象中的一个项目:     o = {         “AlertDate”:“/日期(1277334000000 + 0100)/”,         “进步”:1,         “ReviewPeriod”: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 :(得分:0)

我需要一个更全面的答案,而不仅仅是改变个别财产的日期。

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

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

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

答案 4 :(得分:0)

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

如果您希望某些旧日期而不是

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

你可以:

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