将 Json 日期字符串转换为 JavaScript 日期对象
Posted
技术标签:
【中文标题】将 Json 日期字符串转换为 JavaScript 日期对象【英文标题】:Convert Json date string to JavaScript date object 【发布时间】: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":
。
【参考方案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\\((\\d13\\+\\d4)\\)\\\\\/\\"', '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, '')));
【讨论】:
以上是关于将 Json 日期字符串转换为 JavaScript 日期对象的主要内容,如果未能解决你的问题,请参考以下文章
将 JavaScript Date 对象转换为 JSON 字符串时日期更改为前一天
将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期