2162 Stimmen

Wie formatiere ich ein Microsoft JSON-Datum?

Ich versuche mich zum ersten Mal an Ajax mit jQuery. Ich bin immer meine Daten auf meine Seite, aber ich habe einige Probleme mit den JSON-Daten, die für Datum Datentypen zurückgegeben wird. Im Grunde bekomme ich eine Zeichenfolge zurück, die wie folgt aussieht:

/Date(1224043200000)/

Von jemandem völlig neu zu JSON - Wie formatiere ich dies zu einem kurzen Datum Format? Sollte dies irgendwo in der jQuery-Code behandelt werden? Ich habe versucht, die jQuery.UI.datepicker Plugin mit $.datepicker.formatDate() ohne jeden Erfolg.

Zu Ihrer Information: Hier ist die Lösung, die ich mit einer Kombination aus den Antworten hier gefunden habe:

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;
}

Diese Lösung erhielt mein Objekt von der Callback-Methode und zeigte die Daten auf der Seite richtig mit der Datumsformat-Bibliothek.

27 Stimmen

Das könnte interessant sein: hanselman.com/blog/

10 Stimmen

Das Format /Date(...)/ ist spezifisch für Microsofts eingebautes JSON-Datumsformat - es ist nicht Teil eines Standards, und JSON, das von Javascript kommt, hat einen Standard: Das ISO-Format, das Javascript spezifiziert: stackoverflow.com/a/15952652/176877 Diese Frage bezieht sich also auf das JSON-Date-Format von Microsoft. Ich habe den Titel geändert, um dies zu verdeutlichen.

19 Stimmen

Das ist ein Scherz! Microsoft hat JSON seinen eigenen Stempel aufgedrückt! und auf Daten!! Wann lernen sie es endlich!

18voto

Dan Beam Punkte 3464

Ich poste in einem großartigen Thread:

var d = new Date(parseInt('/Date(1224043200000)/'.slice(6, -2)));
alert('' + (1 + d.getMonth()) + '/' + d.getDate() + '/' + d.getFullYear().toString().slice(-2));

1 Stimmen

Nette Idee, aber was ist, wenn eine Zeitzonenverschiebung enthalten ist? In diesem Fall ist es besser, substr(6) anstelle von slice(6,-2) zu verwenden - siehe meine Antwort unten.

17voto

Scott Willeke Punkte 8232

Ich möchte hier noch einen weiteren Ansatz hinzufügen, den "Tick-Ansatz", der WCF takes ist anfällig für Probleme mit Zeitzonen, wenn Sie nicht extrem vorsichtig sind, wie beschrieben aquí und an anderen Orten. Daher verwende ich jetzt das ISO 8601-Format, das sowohl von .NET als auch von JavaScript ordnungsgemäß unterstützt wird und Zeitzonen-Offsets enthält. Unten sind die Details:

In WCF/.NET:

Wobei CreationDate ein System.DateTime ist; ToString("o") verwendet .NET's Angabe des Round-Trip-Formats die eine ISO 8601-konforme Datumszeichenfolge erzeugt

new MyInfo {
    CreationDate = r.CreationDate.ToString("o"),
};

In JavaScript

Gleich nach dem Abrufen der JSON gehe ich fixup die Daten zu JavaSript Date-Objekte mit dem Date-Konstruktor, die eine ISO 8601-Datum-String akzeptiert werden ...

$.getJSON(
    "MyRestService.svc/myinfo",
    function (data) {
        $.each(data.myinfos, function (r) {
            this.CreatedOn = new Date(this.CreationDate);
        });
        // Now each myinfo object in the myinfos collection has a CreatedOn field that is a real JavaScript date (with timezone intact).
       alert(data.myinfos[0].CreationDate.toLocaleString());
    }
)

Sobald Sie ein JavaScript-Datum haben, können Sie alle bequemen und zuverlässigen Datumsmethoden verwenden, wie toDateString , toLocaleString etc.

16voto

Bilgin Kılıç Punkte 7779
var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 

Gibt es eine andere Möglichkeit, ohne die jQuery-Bibliothek zu verwenden?

0 Stimmen

Dies ist eine neue Frage und sollte als eigenständige Frage gestellt und nicht hier eingebettet werden.

11voto

Ravi Mehta Punkte 444

Das kann auch Ihnen helfen.

 function ToJavaScriptDate(value) { //To Parse Date from the Returned Parsed Date
        var pattern = /Date\(([^)]+)\)/;
        var results = pattern.exec(value);
        var dt = new Date(parseFloat(results[1]));
        return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
    }

10voto

Ich bekomme das Datum auf diese Weise:

"/Date(1276290000000+0300)/"

In einigen Beispielen ist das Datum in leicht abweichenden Formaten angegeben:

"/Date(12762900000000300)/"
"Date(1276290000000-0300)"

usw.

Also habe ich mir die folgende RegExp ausgedacht:

/\/+Date\(([\d+]+)\)\/+/

und der endgültige Code lautet:

var myDate = new Date(parseInt(jsonWcfDate.replace(/\/+Date\(([\d+-]+)\)\/+/, '$1')));

Ich hoffe, es hilft.

Aktualisierung: Ich habe diesen Link von Microsoft gefunden: Wie kann ich Daten mit JSON serialisieren?

Dies scheint das zu sein, wonach wir alle suchen.

1 Stimmen

Regexp-Ersetzungen sind langsam... Es ist viel schneller, den Integer-Teil mit substr(6) zu erfassen und ihn an parseInt() zu übergeben - siehe meine Antwort unten.

0 Stimmen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X