Problem mit Date.UTC()
Dennis
- javascript
Guten Abend,
ich sitze hier gerade am Rechner und verstehe die Welt nicht mehr... Ich benutze ein Skript, das ich vor einigen Monaten geschrieben habe, das mir die Jahre, Tage etc., die seit dem eingegebenen Datum vergangen sind, ausgiebt. Bisher hatte ich eigentlich keine Probleme damit, es funktioniert soweit ich das beurteilen kann einwandfrei. Jedoch habe ich heute zu weiteren Testzwecken mit dem Skript die Daten
eingegeben. Ich kam zu verblüffenden Ergebnissen:
Soweit ich weiß hat der 6. Monat 30 Tage... Woher kommt dann bitte der Sprung von 2 Tagen??
Wenn ich nämlich selber nachrechne (01.07.2000):
3 (Schalttage) + 14 * 365 + 31 + 31 + 30 + 31 + 30 + 31 + 31 +28 + 31 + 30 + 31 + 1 = 5449
also, die richtige Anzahl der Tage.
Habe diesen Online-Rechner gefunden (hat dasselbe Problem... einfach mal die beiden Daten eingeben): Online Rechner
Wenn man den 31.06.2000 dort eingiebt (auch wenn der Juni nur 30 Tage hat...) kommt das richtige Ergebnis raus - so auch bei meinem Skript.
Kann mir jemand erklären was da falsch läuft? Oder soll ich erstmal einen kleinen Schnipsel von meinem Skript zeigen?
Dennis
Tach,
Kann mir jemand erklären was da falsch läuft? Oder soll ich erstmal einen kleinen Schnipsel von meinem Skript zeigen?
Code wäre hilfreich, ohne den würde ich einfach mal raten, dass es die Annahme ist, ein Tag habe immer 86400 Sekunden; da am 30.06. allerdings keine Somemrzeit-Umstellung schuld sein kann, blieben nur noch Schaltsekunden übrig, da passt dann aber nur der 30.06. grob rein aber das Jahr nicht.
mfg
Woodfighter
@@woodfighter
blieben nur noch Schaltsekunden übrig
Seit wann kümmert sich JavaScript (oder irgendeine andere Sprache) um Schaltsekunden?
LLAP
Tach,
Seit wann kümmert sich JavaScript (oder irgendeine andere Sprache) um Schaltsekunden?
keine Ahnung, fiel mir nur passend zum Datum ein; aber ich habe eine neue Vermutung, über die ich gerade beim herumspielen gestolpert bin: Javascript zählt Monate ab 0, also vermute ich mal, dass sich der OP im Juli befindet, ohne damit zu rechnen.
mfg
Woodfighter
Hey Woodfighter,
aber ich habe eine neue Vermutung, über die ich gerade beim herumspielen gestolpert bin: Javascript zählt Monate ab 0, also vermute ich mal, dass sich der OP im Juli befindet, ohne damit zu rechnen.
Heureka! Ja, schon kurios warum gerade die Monate bei 0 anfangen. Wer hat sich das denn wieder ausgedacht...
Einfach
var date = Date.UTC(2000, (6 - 1), 30, 0, 0, 0) + 1000*60*60*24*30;
und nun läuft es auch damit wie geschmiert. Und ich dachte schon ich wäre 10 mal hochgeworfen und nur 1 mal aufgefangen worden ;-).
Danke.
Dennis
Tach,
Heureka! Ja, schon kurios warum gerade die Monate bei 0 anfangen. Wer hat sich das denn wieder ausgedacht...
die Date-Api in Javascript ist relativ nahe zur Date-Api in Java (und die ist noch viel schlimmer, als die von Javascript) entworfen worden (siehe https://brendaneich.com/2008/04/popularity/) und das hat die ungewöhnliche Monatszählung von C++ geerbt.
mfg
Woodfighter
Hallo,
die Date-Api in Javascript ist relativ nahe zur Date-Api in Java (und die ist noch viel schlimmer, als die von Javascript) entworfen worden (siehe https://brendaneich.com/2008/04/popularity/) und das hat die ungewöhnliche Monatszählung von C++ geerbt.
was da jetzt ungewöhnlich ist, darüber kann man diskutieren; ich finde die Zählung mit 0 beginnend eigentlich selbstverständlich.
Ich kenne Java und dessen APIs nicht, aber beim Date-Objekt von Javascript finde ich vor allem schlecht, dass man unterschiedliche Zählungen verwendet: Monat ab 0, Tag ab 1. Würde man wenigstens konsequent entweder ab 0 oder ab 1 zählen, wäre ja alles in Butter. Aber so durcheinander ...
So long,
Martin
@@Der Martin
was da jetzt ungewöhnlich ist, darüber kann man diskutieren
Ungewöhnlich ist daran, dass jeder normale Mensch Monate so zählt, wie er sie vom Kalender her gewohnt ist: von 1 bis 12.
ich finde die Zählung mit 0 beginnend eigentlich selbstverständlich.
Ich nicht. Sie ist ein Griff ins Klo. Und zwar ganz tief rein.
aber beim Date-Objekt von Javascript finde ich vor allem schlecht, dass man unterschiedliche Zählungen verwendet: Monat ab 0, Tag ab 1. Würde man wenigstens konsequent entweder ab 0 oder ab 1 zählen, wäre ja alles in Butter. Aber so durcheinander ...
Ja, die unterschiedliche Zählung unterstreicht die Unsinnigkeit nochmals.
LLAP
Tach,
ich finde die Zählung mit 0 beginnend eigentlich selbstverständlich.
Ich nicht. Sie ist ein Griff ins Klo. Und zwar ganz tief rein.
gibt es für Javascript ein Joda-ähnliches Projekt mit dem man den Kram umgehen kann?
mfg
Woodfighter
gibt es für Javascript ein Joda-ähnliches Projekt mit dem man den Kram umgehen kann?
@@Dennis
Oder soll ich erstmal einen kleinen Schnipsel von meinem Skript zeigen?
Nein, bloß nicht!
Und wenn du es nicht mehr aushältst, dann aber bitte wirklich nur einen kleinen Schnipsel, aus dem nicht gleich das ganze Problem zu erkennen ist.
LLAP
Hey Gunnar,
Nein, bloß nicht! Und wenn du es nicht mehr aushältst, dann aber bitte wirklich nur einen kleinen Schnipsel, aus dem nicht gleich das ganze Problem zu erkennen ist.
Es geht nichts über eine frische Priese Sarkasmus am Abend. Mein Favorit ist allerdings Zynismus. Das bekommst du nächstes mal bestimmt auch hin.
Dennis
@@Dennis
Es geht nichts über eine frische Priese Sarkasmus am Abend. Mein Favorit ist allerdings Zynismus. Das bekommst du nächstes mal bestimmt auch hin.
Je nach Vorlage.
LLAP
Hallo,
Es geht nichts über eine frische Priese Sarkasmus am Abend.
ob viertel vor drei nachts noch "Abend" ist, darüber gehen die Ansichten auseinander. Ich sehe es aber ähnlich: Solange ich noch nicht im Bett war, ist es für mich noch Abend. Zeitangaben wie "halb zwei morgens" sind daher für mich irgendwie ein Widerspruch in sich: Halb zwei ist wahlweise Abend, Nacht oder Mittag, aber gewiss nicht Morgen.
Mein Favorit ist allerdings Zynismus.
Und offensichtlich die kreative Verwendung von 'ie':
ausgiebt
eingiebt
Priese
Ich finde, das sieht vom Schriftbild her schon sehr merkwürdig aus.
So long,
Martin