Dennis: Problem mit Date.UTC()

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

  • 30.06.2000 und
  • 01.07.2000

eingegeben. Ich kam zu verblüffenden Ergebnissen:

  • Tage: 5450
  • Tage: 5448

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

  1. 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

    1. @@woodfighter

      blieben nur noch Schaltsekunden übrig

      Seit wann kümmert sich JavaScript (oder irgendeine andere Sprache) um Schaltsekunden?

      LLAP

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. 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

        1. 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

          1. 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

            1. 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

              1. @@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

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                1. 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

                  1. gibt es für Javascript ein Joda-ähnliches Projekt mit dem man den Kram umgehen kann?

                    http://momentjs.com/

  2. @@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

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. 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

      1. @@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

        --
        „Sag, wird ’n Zyniker noch mal ’n Schelm“ (Gerhard Gundermann, Wo soll’n wir hin)
      2. 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