我有以下JSON对象,其日期字段格式如下:
{
"AlertDate": "\/Date(1277334000000+0100)\/",
"Progress": 1,
"ReviewPeriod": 12
}
我想编写一个正则表达式或函数将其转换为javascript对象,使其形式为:
{
"AlertDate": new Date(1277334000000),
"Progress": 1,
"ReviewPeriod": 12
}
上述日期格式在JQuery parseJSON方法中无法验证。
我想将1277334000000 + 0100转换为正确的毫秒数,以便在验证后调用eval时创建正确的日期。
任何人都可以帮助我解决这个问题吗?
答案 0 :(得分:1)
我已经编写了一个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, '')));