Wie kann ich einen Datumswert in ISO 8601-Format zu einem Date-Objekt in JavaScript konvertieren?

StackOverflow https://stackoverflow.com/questions/498578

  •  20-08-2019
  •  | 
  •  

Frage

Ich habe versucht, einen Datumswert in ein besser lesbares Format zu konvertieren. Um dies zu tun, ich versuche das Datum mit der JavaScript Date.parse() Methode zu analysieren. Das aber funktioniert nicht auf dem Eingang (zB: "2007-09-21T14:15:34.058-07:00"), die ich habe. Das Endziel ist die Ausgabe ein Datum Zeichenfolge wie "January 30th, 2008 @ 2:15PM".

Irgendwelche Ideen?

War es hilfreich?

Lösung

Versuchen Sie http://www.datejs.com/ . Es ist eine JavaScript-Date-Bibliothek mit einer erweiterten Date.parse Verfahren und eine Date.parseExact Methode, die Ihnen eine Format-String angeben können. Siehe DateJS APIDocumentation .

Andere Tipps

Sie sollten wahrscheinlich verwenden die datejs , die a href = " f3lix empfohlen, jedoch war ich gelangweilt und warf zusammen ein kleines Objekt, das genau das tut, was Sie gefragt:

25. September 2012: Gereinigt Code erlaubt nicht erweitert Format, zB 20120925T164740 + 0200

1. Dezember 2011: Ein Fehler im Monat String. August fehlte

var ISODate = {
  convert :
    function (input){
      if (!(typeof input === "string")) throw "ISODate, convert: input must be a string";
      var d = input.match(/^(\d{4})-?(\d{2})-?(\d{2})[T ](\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|(?:([+-])(\d{2}):?(\d{2})))$/i);
      if (!d) throw "ISODate, convert: Illegal format";
      return new Date(
        Date.UTC(
          d[1], d[2]-1, d[3],
          d[4], d[5], d[6], d[7] || 0 % 1 * 1000 | 0
        ) + (
          d[8].toUpperCase() === "Z" ? 0 :
            (d[10]*3600 + d[11]*60) * (d[9] === "-" ? 1000 : -1000)
        )
      );
    },
  format :
    function(date, utc){
      if (typeof date === "string") date = this.convert(date);
      if (!(date instanceof Date)) throw "ISODate, format: t is not a date object";

      var t={'FullYear':0, 'Month':0, 'Date':0, 'Hours':0, 'Minutes':0, 'Seconds':0};
      for (var key in t) {
        if (t.hasOwnProperty(key)) t[key] = date["get" +(utc ? "UTC" :"") + key]()
      }

      return this.month[t.Month]
        + " "
        + this.ordinal(t.Date)
        + ", "
        + t.FullYear
        + " @ "
        + this.clock12(t.Hours,t.Minutes);
      },
  month:
    [
      "January", "February", "March", "April", "May", "June",
      "July", "August", "September", "October", "November", "December"
    ],
  ordinal:
    function(n) {
      return n+(
        [
          "th", "st", "nd", "rd"
        ][
          (( n % 100 / 10) | 0) === 1 ? 0 : n % 10 < 4 ? n % 10 : 0
        ]
      );
  },
  clock12:
    function(h24, m, s){
      h24%=24;
      var h12 = (h24 % 12) || 12;
      return h12 + ":" +
        (m < 10 ? "0" + m : m) +
        (isFinite(s) ? ":" + (s < 10 ? "0" + s : s ) : "") +
        (h24 < 12 ? "AM" : "PM");
      }
};

Beispiel:

//Shows the date in the users timezone:
alert(ISODate.format("2007-09-21T14:15:34.058-07:00"));

//Show the date in UTC (Timezone Z, 00:00)
alert(ISODate.format("2007-09-21T14:15:34.058-07:00",true));

Erklärung:

konvertieren nimmt einen String als Eingabe und gibt ein Datum Objekt, wenn erfolgreich oder löst eine Ausnahme aus, wenn nicht. Die Zeichenfolge in einem der folgenden Formate sein:

  • YYYY-MM-DDThh: mm: ss.sZ
  • YYYY-MM-DDThh: mm: ss.sXaa: bb

Dabei gilt:

  • YYYY ist das Jahr als 4-stellige ganze Zahl
  • MM ist der Monat, als 2-stellige ganze Zahl
  • DD ist das Datum des Monats als 2-stellige ganze Zahl
  • T ist das Zeichen T oder Raum (\ x20)
  • hh ist die Stunde im 24-Stunden-Format, als 2-stellige ganze Zahl
  • mm ist die Minute als 2-stellige ganze Zahl
  • ss.s ist die zweite, entweder als eine 2-stellige ganze Zahl oder als Gleitpunkt mit 2 Ziffern gefolgt von einem Punkt, gefolgt von einer oder mehreren Ziffern.
  • Z ist das Zeichen Z (Zeitzone anzeigt, Z, UTC + 00: 00)
  • X ist entweder ein Plus (+) oder Minus (-) Zeichen des Timeoffset zu UTC
  • aa ist die Stunde der Timeoffset zu UTC als 2-stellige ganze Zahl
  • bb ist die Minute von timeoffset zu ITC als 2-stellige ganze Zahl

Format nimmt einen String in dem obigen Format oder ein Datum-Objekt und gibt einen String formatiert als:

  • M D, Y @ h: mm

Wo   - M ist der englische Name des Monats   - D ist das Datum des Monats mit einer numerischen Reihenfolge Suffix (1-2 Ziffern)   - Y ist das Jahr (1 oder mehr Stellen)   - h ist die Stunde im 12-Stunden-Format (1-2 Ziffern)   - m die Minute (2 Ziffern)

Monat ist ein Array mit dem Namen der Monate

Ordnungs ist eine Funktion, die eine Zahl als Eingabe und gibt die Zahl mit Anhang der englischen Aufzählung nimmt.

clock12 ist eine Funktion, die Stunde, Minute und Sekunde in 24-Stunden-Format und wandelt es in eine Zeichenfolge in den USA 12h-Format erfolgt. Die Sekunden ist optional.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top