Linuchs: Javascript: Tage zu heutigem Datum addieren

Moin,

ich habe das Datumsformat in Javascript nicht verstanden, es ist nicht richtig dokumentiert.

Möchte das heutige Datum in der Form 2017-01-28 haben. Ist das wirklich so kompliziert?

  var jetzt = new Date();
  var jjjj  = jetzt.getFullYear();
  var mm    = '0' + (jetzt.getMonth() + 1);
  mm        = mm.slice(-2);
  var tt    = '0' + jetzt.getDate();
  tt        = tt.slice(-2);
  heute     = jjjj + '-' + mm + '-' + tt;

Und dann möchte ich das Datum in 7 Tagen haben. SelfHTML schreibt:

Die Einheit, in der in JavaScript intern Zeit berechnet wird, ist eine Millisekunde.

Ich addiere also die Millisekunden für 6 Tage hinzu

  var jetzt = new Date() +6000 *86400;  // ms addieren fuer heute +6 Tage
  var jjjj  = jetzt.getFullYear();
  var mm    = '0' + (jetzt.getMonth() + 1);
  mm        = mm.slice(-2);
  var tt    = '0' + jetzt.getDate();
  tt        = tt.slice(-2);
  woche     = jjjj + '-' + mm + '-' + tt;

bringt die Fehlermeldung jetzt.getFullYear is not a function

Wenn ich dem SelfHTML-Vorschlag Objektname = new Date(Millisekunden); folge, kommt

Millisekunden is not defined

Wie geht's? Das ist doch in PHP sooo einfach ...

Linuchs

Folgende Beiträge verweisen auf diesen Beitrag:

  1. Hallo Linuchs,

    Du kannst zu einem Datumsobjekt nicht einfach irgendwas addieren.

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. Tach!

      Du kannst zu einem Datumsobjekt nicht einfach irgendwas addieren.

      Also, können kann man schon. Nur sollte man, zum Beispiel mit console.log(), sich anschauen, was dabei rausgekommen ist, wenn das jetzt schon angemeckert wird.

      dedlfix.

  2. @@Linuchs

    ich habe das Datumsformat in Javascript nicht verstanden, es ist nicht richtig dokumentiert.

    Wenn ich nach „javascript date“ suche, erhalte ich folgende Treffer.

    1. SELFHTML
    2. W3Schools
    3. Mozilla Developer Network

    Bei welchem würdest du nachschlagen?

    Möchte das heutige Datum in der Form 2017-01-28 haben. Ist das wirklich so kompliziert?

    Nein.

    Und dann möchte ich das Datum in 7 Tagen haben. SelfHTML schreibt:

    Ich addiere also die Millisekunden für 6 Tage hinzu

    Warum 6, wenn du das Datum in 7 Tagen haben möchtest?

    Wie Matthias schon sagte, kannst du das nicht zum Objekt addieren. Wohl aber zu der Anzahl der „Millisekunden“[1] ab 1970-01-01T00:00Z.

    Zu beachten ist dabei, dass du eventuell nicht das Datum von 7 (oder 6?) Tagen später erhältst, wenn die Umstellung auf Sommer- oder Normalzeit in den Zeitrahmen fällt. Da müsstest du die Uhrzeit auf einen sicheren Wert setzen, z.B. 0:00 Uhr.

    LLAP 🖖

    --
    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory

    1. in Gänsefüßchen, weil die so gezählten nicht die tatsächlich vergangenen Millisekunden sind, sondern deren Zahl um 37000 abweicht ↩︎

    1. Tach!

      Zu beachten ist dabei, dass du eventuell nicht das Datum von 7 (oder 6?) Tagen später erhältst, wenn die Umstellung auf Sommer- oder Normalzeit in den Zeitrahmen fällt. Da müsstest du die Uhrzeit auf einen sicheren Wert setzen, z.B. 0:00 Uhr.

      0:00 Uhr ist aber gerade der nicht sichere Wert (den alle nehmen und damit auf die Nase fallen). Bei einer Zeitverschiebung von ±1 Stunde muss man mindestens diese Zeitspanne Abstand vom Tageswechsel halten.

      dedlfix.

      1. Zu beachten ist dabei, dass du eventuell nicht das Datum von 7 (oder 6?) Tagen später erhältst, wenn die Umstellung auf Sommer- oder Normalzeit in den Zeitrahmen fällt. Da müsstest du die Uhrzeit auf einen sicheren Wert setzen, z.B. 0:00 Uhr.

        0:00 Uhr ist aber gerade der nicht sichere Wert (den alle nehmen und damit auf die Nase fallen). Bei einer Zeitverschiebung von ±1 Stunde muss man mindestens diese Zeitspanne Abstand vom Tageswechsel halten.

        Da Zeitumstellungen zumindest hierzulande um 2 Uhr stattfinden und im Allgemeinen sicherlich immer irgendwann nachts (Schaltsekunden werden IIRC um Mitternacht eingefügt), hinterlässt der ganze Bereich bei mir ein unangenehmes Gefühl. Ruhig schlafen kann ich um 12 Uhr mittags.

        1. Tach!

          Bei einer Zeitverschiebung von ±1 Stunde muss man mindestens diese Zeitspanne Abstand vom Tageswechsel halten.

          Da Zeitumstellungen zumindest hierzulande um 2 Uhr stattfinden und im Allgemeinen sicherlich immer irgendwann nachts (Schaltsekunden werden IIRC um Mitternacht eingefügt), hinterlässt der ganze Bereich bei mir ein unangenehmes Gefühl. Ruhig schlafen kann ich um 12 Uhr mittags.

          Es kommt nicht darauf an, wann die Umstellung stattfindet. Man kann das auch ganz ohne Gefühl rein mathematisch klären. Tage haben 23, 24 oder 25 Stunden. Eine Stunde mehr oder weniger sind zwei Stunden, die rund um den Tageswechselzeitpunkt freigehalten werden müssen. Man darf nur nicht exakt diese plus/minus eine Stunde freihalten, sondern mindestens eine Sekunde mehr, weil man sonst in einigen Situationen auf 0 Uhr kommt, und das ist ja immer schon der nächste Tag.

          Schaltsekunden werden von den üblichen Systemen gar nicht berücksichtigt.

          Übrigens, der Zeitpunkt, an dem die Zeitumstellung stattfindet, muss sich auch an diese Regeln halten, damit das Ergebnis im Tag bleibt und nicht auch noch das Datum wechselt.

          dedlfix.

      2. @@dedlfix

        0:00 Uhr ist aber gerade der nicht sichere Wert

        Grmpf.

        LLAP 🖖

        --
        “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
    2. Und dann möchte ich das Datum in 7 Tagen haben. SelfHTML schreibt:

      Ich addiere also die Millisekunden für 6 Tage hinzu

      Warum 6, wenn du das Datum in 7 Tagen haben möchtest?

      Ich möchte eine Woche (= 7 Tage) incl. heute haben.

    3. Moin,

      Zu beachten ist dabei, dass du eventuell nicht das Datum von 7 (oder 6?) Tagen später erhältst, wenn die Umstellung auf Sommer- oder Normalzeit in den Zeitrahmen fällt. Da müsstest du die Uhrzeit auf einen sicheren Wert setzen, z.B. 0:00 Uhr.

      Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

      Schönen Sonntag.

      1. @@pl

        Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

        Die lokal eingestellte Uhrzeit[1], ja. Oder was meinst du?

        LLAP 🖖

        --
        “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory

        1. die sich von der richtigen Uhrzeit durchaus unterscheiden kann, insbesondere, wenn sie nicht automatisch mit der genauen synchronisiert wird ↩︎

        1. @@pl

          Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

          Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du?

          Nicht nur die Uhrzeit.

          MfG

          1. @@pl

            Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

            Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du?

            Nicht nur die Uhrzeit.

            Das Datum natürlich auch. War für mich bei Uhrzeit (im Sinne von: Zeitpunkt) mit drin. Sonst noch was?

            LLAP 🖖

            --
            “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
            1. @@pl

              Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

              Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du?

              Nicht nur die Uhrzeit.

              Das Datum natürlich auch. War für mich bei Uhrzeit (im Sinne von: Zeitpunkt) mit drin. Sonst noch was?

              Die Zeitzone. Und ob eine automatische Umstellung bei Sommerzeit erfolgt oder nicht, ist ebenfalls eine lokale Einstellung.

              MfG

              1. @@pl

                Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten.

                Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du?

                Nicht nur die Uhrzeit.

                Das Datum natürlich auch. War für mich bei Uhrzeit (im Sinne von: Zeitpunkt) mit drin. Sonst noch was?

                Die Zeitzone. Und ob eine automatische Umstellung bei Sommerzeit erfolgt oder nicht, ist ebenfalls eine lokale Einstellung.

                var now = new Date;
                console.log(now.toISOString()); // "2017-01-29T08:49:03.791Z"
                

                Wie genau spielt die lokale Einstellung der Zeitzone da mit rein?

                var now = new Date;
                console.log(now.getUTCHours()); // 8
                

                Wie genau spielt die lokale Einstellung der Zeitzone da mit rein?

                LLAP 🖖

                --
                “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
                1. Hallo Gunnar Bittersmann,

                  Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten. (pl)

                  Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du? (Gunnar)

                  Wie genau spielt die lokale Einstellung der Zeitzone da mit rein?

                  Die Zeitzone ist Bestandteil der lokal eingestellten Uhrzeit.

                  Bis demnächst
                  Matthias

                  --
                  Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                  1. @@Matthias Apsel

                    Zu beachten ist, dass für Zeitberechnungen mit JavaScript stets die lokalen Einstellungen am PC des Benutzers gelten. (pl)

                    Die lokal eingestellte Uhrzeit[^1], ja. Oder was meinst du? (Gunnar)

                    Wie genau spielt die lokale Einstellung der Zeitzone da mit rein?

                    Die Zeitzone ist Bestandteil der lokal eingestellten Uhrzeit.

                    OK. Wenn man seine Uhrzeit aber mit einem Zeitserver synchronisiert, ist die Einstellung der Zeitzone für die auf UTC basierenden Methoden schnuppe.

                    LLAP 🖖

                    --
                    “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  3. Moin,

    Wie geht's? Das ist doch in PHP sooo einfach ...

    In JS ist es auch kein Problem mit fortlaufenden Tagen zu rechnen. Vor einiger Zeit hab ich mal eine JS-Klasse entwickelt nach den Formeln von Scaliger.

    Wenn Du Interesse hast, melde Dich einfach.