jquery - Day format - Microsoft JSONの日付をフォーマットするにはどうすればいいですか?

Axios deserialize date / jquery / asp.net / ajax / json

私はjQueryを使ってAjaxで最初のクラックを取っています。データをページに取得していますが、Dateデータ型に対して返される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)/'のようにフォーマットされたMicrosoftAJAX日付の処理
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の日付フォーマットを解析し、古いIEの問題に対処する。

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

    //これはUTC、オフセット、または未定義ですか?未定義をUTCとして扱います。
    if (m.length == 7 ||                // ym-dTh:m:s、msなし、tzオフセットなし-UTCを想定
        (m.length > 7 && (
            !m[7] ||                    //配列は長さ9に戻り、7と8は未定義です
            m[7].charAt(0) != '.' ||    // ms部分、tzオフセットなし、またはms部分なし、Z
            !m[8] ||                    // ms部分、tzオフセットなし
            m[8] == 'Z'))) {            //ミリ秒の部分と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)ISOフォーマットを、ミリ秒単位の小数点以下3桁の固定値で解析する-より簡単に。

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');
    },
    ...
});