jquery - Asp .NET Core controller FromBody JSON - Microsoft JSON 날짜 형식은 어떻게 지정합니까?

Validation / jquery / asp.net / ajax / json

나는 jQuery 로 Ajax 에서 첫 번째 균열을 가지고 있습니다. 내 페이지에 데이터를 가져오고 있지만 날짜 데이터 유형에 대해 반환되는 JSON 데이터에 문제가 있습니다. 기본적으로 다음과 같은 문자열이 반환됩니다.

/Date(1224043200000)/

참고 : 여기에 답변 조합을 사용하여 생각 해낸 해결책은 다음과 같습니다.

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

16 revs, 9 users 40%



Answer #1

1) Microsoft 날짜 형식 감지

// '/ Date (01238329348239) /'와 같은 형식의 Microsoft AJAX 날짜 처리
function looksLikeMSDate(s) {
    return /^\/Date\(/.test(s);
}

2) ISO 날짜 형식 감지

var isoDateRegex = /^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d\d?\d?)?([\+-]\d\d:\d\d|Z)?$/;

function looksLikeIsoDate(s) {
    return isoDateRegex.test(s);
}

3) MS 날짜 형식 구문 분석 :

function parseMSDate(s) {
    // / Date (를지나 앞으로 이동하고 나머지는 parseInt가 처리합니다.
    return new Date(parseInt(s.substr(6)));
}

4a) 표준 ISO 날짜 형식을 구문 분석하고 oldIE의 문제에 대처합니다.

function parseIsoDate(s) {
    var m = isoDateRegex.exec(s);

    // UTC, 오프셋 또는 정의되지 않았습니까? undefined를 UTC로 취급하십시오.
    if (m.length == 7 ||                // ym-dTh : m : s, ms 없음, tz 오프셋 없음-UTC 가정
        (m.length > 7 && (
            !m[7] ||                    // 7과 8에 대해 정의되지 않은 배열이 길이 9로 돌아 왔습니다.
            m[7].charAt(0) != '.' ||    // ms 부분, tz 오프셋 없음 또는 ms 부분 없음, Z
            !m[8] ||                    // ms 부분, tz 오프셋 없음
            m[8] == 'Z'))) {            // ms 부분 및 Z
        // JavaScript의 이상한 날짜 처리는 1-12가 아닌 0-11에서와 같이 월이 0부터 시작될 것으로 예상합니다. 나머지는 날짜에서 예상 한대로입니다.
        var d = new Date(Date.UTC(m[1], m[2]-1, m[3], m[4], m[5], m[6]));
    } else {
        // 현지
        var d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]);
    }

    return d;
}

4b) 고정 소수점 이하 3 밀리 초로 ISO 형식을 구문 분석합니다.

function parseIsoDate(s) {
    return new Date(s);
}

5) 포맷 :

function hasTime(d) {
    return !!(d.getUTCHours() || d.getUTCMinutes() || d.getUTCSeconds());
}

function zeroFill(n) {
    if ((n + '').length == 1)
        return '0' + n;

    return n;
}

function formatDate(d) {
    if (hasTime(d)) {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
        s += ' ' + d.getHours() + ':' + zeroFill(d.getMinutes()) + ':' + zeroFill(d.getSeconds());
    } else {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
    }

    return s;
}

6) 모든 것을 하나로 묶습니다.

function parseDate(s) {
    var d;
    if (looksLikeMSDate(s))
        d = parseMSDate(s);
    else if (looksLikeIsoDate(s))
        d = parseIsoDate(s);
    else
        return null;

    return formatDate(d);
}

ASP.NET MVC에서 jQuery 1.4의 Ajax 함수를 사용하는 경우 다음을 사용하여 모든 DateTime 속성을 Date 객체로 전환 할 수 있습니다.

// 한번
jQuery.parseJSON = function(d) {return eval('(' + d + ')');};

$.ajax({
    ...
    dataFilter: function(d) {
        return d.replace(/"\\\/(Date\(-?\d+\))\\\/"/g, 'new $1');
    },
    ...
});