我正在使用jQuery向我的ASP.NET MVC应用程序执行ajax请求,在“success”处理程序中,我收到一个使用Json.NET序列化的ISO-8601格式的日期对象:
response = {
FirstDate: "2001-11-11T00:00:00Z"
SecondDate: "2002-22-22T00:00:00Z"
}
之后我需要手动转换所有这些日期才能使用它们:
var firstParsedDate = new Date(response.MyDate);
var secondParsedDate = new Date(response.MyDate);
有没有办法接收已经解析过日期的响应对象? 如果没有,他们可以一次解析吗?
答案 0 :(得分:1)
您可以使用jQuery的each()
对每个值执行一个函数
出于演示目的,我添加了toString()
。
response = {
FirstDate: "2001-11-11T00:00:00Z",
SecondDate: "2002-22-22T00:00:00Z"
}
$.each(response,function(i, v) {
response[i]=new Date(v).toString();
});
console.log(response);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
以下是使用排除无效日期的map()
的替代示例:
var response = {
FirstDate: "2001-11-11T00:00:00Z",
SecondDate: "2002-22-22T00:00:00Z",
ThirdDate: "1995-08-22T05:23Z",
},
valid_dates = $.map(response, function(v, i) {
return Date.parse(v) ? new Date(v).toString() : null;
});
console.log(valid_dates);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
您可以创建一个递归函数,该函数将通过响应对象并自动将符合ISO 8601格式的任何字符串转换为Date对象。这样的事情应该有效:
function replaceIso8601StringsWithDates(obj)
{
if (obj !== null && typeof (obj) === "object" && !Array.isArray(obj)) {
for (var prop in obj) {
if (isIso8601String(obj[prop])) {
obj[prop] = new Date(obj[prop]);
}
else {
replaceIso8601StringsWithDates(obj[prop]);
}
}
}
}
var iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6})?(Z|[+-]\d{2}:\d{2})$/;
function isIso8601String(val) {
return typeof (val) === "string" && iso8601Regex.test(val);
}
然后在你的success
处理程序中,你只需要调用函数:
function success(data, status, xhr) {
replaceIso8601StringsWithDates(data);
...
}