Hannes Weninger: JavaScript date string to Date object

Hallo,

ich hab gar nicht gewusst, dass es in JavaScript so kompliziert sein kann, aus diesem String '10.11.2016' ein Date- Object zu machen. Mit 2016-11-10 gehts einwandfrei, dass ich das im Date- Konstruktur setze, mit der Punkt- Notation geht leider gar nichts. Wie würdet Ihr das performant lösen, eine "." Split will ich nicht machen, das erscheint mir a bissl komisch.

Besten Danke für Eure Hilfe! Hannes

  1. Hallo Hannes Weninger,

    ich hab gar nicht gewusst, dass es in JavaScript so kompliziert sein kann, aus diesem String '10.11.2016' ein Date- Object zu machen. Mit 2016-11-10 gehts einwandfrei, dass ich das im Date- Konstruktur setze, mit der Punkt- Notation geht leider gar nichts. Wie würdet Ihr das performant lösen, eine "." Split will ich nicht machen, das erscheint mir a bissl komisch.

    var st = "26.04.2013";
    var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
    var dt = new Date(st.replace(pattern,'$3-$2-$1'));
    

    Quelle: StackOverflow

    Bis demnächst
    Matthias

    --
    Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
    1. Tach,

      ich hab gar nicht gewusst, dass es in JavaScript so kompliziert sein kann, aus diesem String '10.11.2016' ein Date- Object zu machen. Mit 2016-11-10 gehts einwandfrei, dass ich das im Date- Konstruktur setze, mit der Punkt- Notation geht leider gar nichts. Wie würdet Ihr das performant lösen, eine "." Split will ich nicht machen, das erscheint mir a bissl komisch.

      var st = "26.04.2013";
      var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
      var dt = new Date(st.replace(pattern,'$3-$2-$1'));
      

      da finde ich die Variante mit split aber schöner (perfomanter sollte sie auch sein (weil Verzicht auf RegExp und der Construktor nicht noch einen String parsen muss), aber das sollte keine Rolle spielen):

      var st = "26.04.2013";
      var stSplit = st.split(".");
      var dt = new Date(stSplit[2],stSplit[1],stSplit[0]);
      

      mfg
      Woodfighter

      1. Hi,

        var st = "26.04.2013";
        var stSplit = st.split(".");
        var dt = new Date(stSplit[2],stSplit[1],stSplit[0]);
        

        Da fehlt doch noch was. IIRC braucht das Date-Objekt den Monat als Zahl zwischen 0 und 11, nicht zwischen 1 und 12.

        cu,
        Andreas a/k/a MudGuard

        1. Tach,

          var st = "26.04.2013";
          var stSplit = st.split(".");
          var dt = new Date(stSplit[2],stSplit[1],stSplit[0]);
          

          Da fehlt doch noch was. IIRC braucht das Date-Objekt den Monat als Zahl zwischen 0 und 11, nicht zwischen 1 und 12.

          danke; da bin ich wiedermal drauf reingefallen und wo ich schon am verbessern bin, könnte man auch gleich noch Warnungen wegen fehlerhafter Oktaldarstellungen entfernen (zumindest das ist im Standard inzwischen wohl entfernt worden):

          var st = "26.04.2013";
          var stSplit = st.split(".");
          var dt = new Date( parseInt(stSplit[2],10), parseInt(stSplit[1]-1,10), parseInt(stSplit[0],10));
          

          mfg
          Woodfighter

          1. @@woodfighter

            Da fehlt doch noch was. IIRC braucht das Date-Objekt den Monat als Zahl zwischen 0 und 11, nicht zwischen 1 und 12.

            danke; da bin ich wiedermal drauf reingefallen

            Auf solch horrenden Schwachsinn muss man auch erstmal kommen.

            LLAP 🖖

            --
            „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
            „Hat auf dem Forum herumgelungert …“
            (Wachen in Asterix 36: Der Papyrus des Cäsar)
            1. Tach,

              Auf solch horrenden Schwachsinn muss man auch erstmal kommen.

              die Api ist halt im wesentlichen von der C- bzw. C++-Api (via Java) abgeleitet und damals waren halt andere Dinge wichtiger; aber ähnlich wie bei Java (<v8, danach gibt es ja mit time etwas mit dem man arbeiten kann) gibt es da bessere Klassen, wenn man viel mit Zeit arbeiten möchte.

              mfg
              Woodfighter