JürgenB: Eigenartiges Verhalten von Date

Hallo,

gerade über ein seltsames Verhalten der Methode Date gestolpert. Date.parse interpretiert Zahlen wie 2,25 im Chrome und in seinem blauen Avatar als Datum:

x=new Date(Date.parse("2,25"))
Sun Feb 25 2001 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit)

Im FF sieht es so aus:

x=new Date(Date.parse("2,25"))
Invalid Date

Safari antwortet in der Console mit NaN.

Gruß
Jürgen

  1. Hi,

    gerade über ein seltsames Verhalten der Methode Date gestolpert. Date.parse interpretiert Zahlen wie 2,25 im Chrome und in seinem blauen Avatar als Datum:

    Zitat aus Date-Object-Beschreibung:

    Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.

    cu,
    Andreas a/k/a MudGuard

  2. Das ist einfach. Chrome, FF, Safari haben einen eigenen JS-Interpreter, der hier auf nicht wie erwartet formulierte Argumente jeweils unterschiedlich reagiert. Ersterer versucht diese zu reparieren, FF und Mozilla verweigern das, reagieren aber mit unterschiedlichen Fehlermeldungen.

    s.a.:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

  3. Hallo Andreas, hallo Jörg,

    ich antworte mal hier.

    Das Date.parse „eigenwillig“ und mit Vorsicht zu verwenden ist, war mir schon bewusst. Ich verwende es auch nur als letzten Versuch, einen String auf Datum zu testen. Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

    Gruß
    Jürgen

    1. Hallo JürgenB,

      Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

      MS-Excel sieht in der Zahl 2.25 (Dezimalpunkt) das Datum 1.2.2025 und in 25.2 den 25.2. des aktuellen Jahres. Man könnte einmal ausprobieren, wie sich Excel diesbezüglich in einer englischen Umgebung verhält.

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. Hallo,

        Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

        man könnte sich fragen, ob es irgendwo üblich ist, das Datum mit Komma getrennt zu schreiben. Mir ist da nichts bekannt, aber was heißt das schon?

        MS-Excel sieht in der Zahl 2.25 (Dezimalpunkt) das Datum 1.2.2025 und in 25.2 den 25.2. des aktuellen Jahres.

        Ups. Auf meinem Firmen-Laptop erkennt Excel (Office 365) sowohl die Eingabe 2.25 als auch 25.2 als die Dezimalzahlen, die sie darzustellen scheinen. Ein Datum vermutet mein Excel nur, wenn die Eingabe zwei Punkte enthält.

        Man könnte einmal ausprobieren, wie sich Excel diesbezüglich in einer englischen Umgebung verhält.

        Ich habe zwar die deutsche Version, aber auf meinem PC ist systemweit der Punkt als Dezimaltrennzeichen eingestellt, und das ISO-8601-Datumsformat.

        Live long and pros healthy,
         Martin

        --
        Für welches Tier mühen wir uns am meisten ab? - Für die Katz'.
        1. Hallo Der Martin,

          Ich habe zwar die deutsche Version, aber auf meinem PC ist systemweit der Punkt als Dezimaltrennzeichen eingestellt, und das ISO-8601-Datumsformat.

          wenn ich bei mir das Dezimaltrennzeichen von , auf . ändere, verhält sich mein Excel so wie deins.

          Bis demnächst
          Matthias

          --
          Du kannst das Projekt SELFHTML unterstützen,
          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
        2. Hallo Der,

          man könnte sich fragen, ob es irgendwo üblich ist, das Datum mit Komma getrennt zu schreiben. Mir ist da nichts bekannt, aber was heißt das schon?

          Kommt drauf an was das Datum enthalten soll.

          Gruss
          Henry

          --
          Meine Meinung zu DSGVO & Co:
          „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
    2. @@JürgenB

      Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

      Wann ist 2,25 in JavaScript eine Dezimalzahl und nicht die Auflistung zweier Zahlen 2 und 25?

      😷 LLAP

      --
      “When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.” —John Lennon
      1. Hallo Gunnar,

        Wann ist 2,25 in JavaScript eine Dezimalzahl und nicht die Auflistung zweier Zahlen 2 und 25?

        in der Interpretation meines Tabellensortierers. Ich finde, Zahlen sollten so dargestellt werden können, wie es der Seitenbesucher gewöhnt ist.

        Aber auch in der „Auflistung zweier Zahlen 2 und 25“ ein Datum zu erkennen, hatte ich nicht erwartet.

        Gruß
        Jürgen

      2. Hallo Gunnar,

        in einem String kann es all das sein, was man hineindeuten möchte. Egal in welcher Sprache der String verarbeitet wird.

        In JavaScript ist es aber weder noch. Es sind zwei Zahlen, verknüpft mit dem Komma-Operator, dem letzten Hund im Operatorenrudel. Das ist keine Auflistung, das würde das Entstehen einer Liste suggerieren. Sondern (und das schreibe ich jetzt nicht mehr für Dich, Du wirst das wissen):

        $$a, b \longrightarrow b$$

        Dieser Kamerad ist so zurückhaltend, dass er an diversen Stellen von anderer Syntax überbrüllt wird.

        Dies sind keine Kommaoperatoren. Der letzte ist sogar ein Syntaxerror

        • function foo(a, b, c) {...} - Parameter
        • let m = Math.min(a, b); - Argumente
        • let arr = [ 1, 2, 3, 4 ]; - Arrayliteral
        • let obj = { x: 2, y: 3 }; - Objektliteral
        • let x = 1,2; - Deklaration

        Aber:

        let x = (1,2);
        console.log(x);
        

        liefert 2.

        Das Komma ist das Lieblingstier im Zoo der Minifizierer.

        if (a < 4) {
           foo(7);
           b = 9;
           doSomething(a, b);
        }
        else
        {
           bar(99);
           b = 88;
        }
        
        // versus
        
        a<4?(foo(7),b=9,doSomething(a,b)):(bar(99),b=88);
        

        Die Klammern sind leider trotzdem nötig, weil der Rang von , geringer ist als der von ?:

        Rolf

        --
        sumpsi - posui - obstruxi
    3. Hallo,

      Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

      Was mich überrascht ist der resultierende Februar. Für Javascript ist doch eigentlich März der Monat 2, oder?

      Gruß
      Kalk

      1. Hi,

        Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

        Was mich überrascht ist der resultierende Februar. Für Javascript ist doch eigentlich März der Monat 2, oder?

        intern ja. Aber nicht, wenn das Datum aus einem String geparst wird.

        Live long and pros healthy,
         Martin

        --
        Für welches Tier mühen wir uns am meisten ab? - Für die Katz'.
      2. Hallo Kalk,

        Aber dass ein Browser in der Dezimalzahl 2,25 das Datum 25. 2. 2001 sieht, hat mich schon überrascht.

        Was mich überrascht ist der resultierende Februar. Für Javascript ist doch eigentlich März der Monat 2, oder?

        mich hat die 2001 mehr überrascht. Aber vielleicht ist der Programmierer ja ein Fan von Arthur C. Clarke.

        Gruß
        Jürgen

        1. Was mich überrascht ist der resultierende Februar. Für Javascript ist doch eigentlich März der Monat 2, oder?

          mich hat die 2001 mehr überrascht.

          Das stimmt alles, Ich halte inzwischen die Versuche, ein Datum und/oder Zeitabgaben aus Strings zu parsen in praktisch allen Programmiersprachen für „erst grob misslungen und dann auch noch schlecht dokumentiert“.

          Anders ausgedrückt, wenn es keine glasklare Dokumentation dafür gibt, dann versuche ich das gar nicht erst, nehme also lieber etwas, wo ich klare Zahlen einwerfen kann. Zumal ich nicht so recht weiß, wozu man sowas haben muss.

          1. Hallo Raketenrant,

            es gibt auch Ausnahmen:

            https://docs.microsoft.com/en-us/dotnet/api/system.datetime.parse?view=net-5.0

            Rolf

            --
            sumpsi - posui - obstruxi
            1. Hallo Raketenrant,

              es gibt auch Ausnahmen:

              https://docs.microsoft.com/en-us/dotnet/api/system.datetime.parse?view=net-5.0

              Rolf

              Man kann echt an nichts mehr glauben. Nicht einmal mehr daran, dass Microsoft schlecht dokumentiert…