自动转换$中的所有日期.AJAX响应



我正在做ajax请求到我的ASP。在"success"处理程序中,我收到一个对象,其中包含使用Json序列化的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);

是否有办法接收一个响应对象与已解析日期?如果没有,它们是否可以一次全部解析?

您可以创建一个递归函数,它将遍历响应对象并自动将匹配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}Td{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);
    ...
}

您可以使用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>

最新更新