Eigenartiges Verhalten von Date
JürgenB
- javascript
- zur info
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
Hi,
gerade über ein seltsames Verhalten der Methode
Date
gestolpert.Date.parse
interpretiert Zahlen wie2,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
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
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
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
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 in25.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
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
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
@@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
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
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) {...}
- Parameterlet m = Math.min(a, b);
- Argumentelet arr = [ 1, 2, 3, 4 ];
- Arrayliterallet obj = { x: 2, y: 3 };
- Objektliterallet x = 1,2;
- DeklarationAber:
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
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
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
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
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.
Hallo Raketenrant,
es gibt auch Ausnahmen:
https://docs.microsoft.com/en-us/dotnet/api/system.datetime.parse?view=net-5.0
Rolf
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…