我正在做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>