Andreas: if Schaltjahr then ...

Hallo,

ich möchte eine Abfrage machen, ob das aktuelle Jahr ein Schaltjahr ist. Wie frage ich das am einfachsten ab? Also etwa wie folgt:

if(diesesJahrIstEinSchaltjahr==true) {
   document.write("<p>Dieses Jahr ist ein Schaltjahr</p>");
}

Was muss da hin?

Beste Grüße
Andreas

  1. if(diesesJahrIstEinSchaltjahr==true) {
       document.write("<p>Dieses Jahr ist ein Schaltjahr</p>");
    }

    auf englisch heißt das leap year und das 2. Ergebnis ist:

    function isLeapYear(yr) {  
      return new Date(yr,1,29).getDate()==29;  
    }  
    
    

    Struppi.

    1. Vielen Dank!

    2. Moin!

      if(diesesJahrIstEinSchaltjahr==true) {
         document.write("<p>Dieses Jahr ist ein Schaltjahr</p>");
      }

      auf englisch heißt das leap year und das 2. Ergebnis ist:

      function isLeapYear(yr) {

      return new Date(yr,1,29).getDate()==29;
      }

        
      Der einem viel Arbeit abnehmende Trick dabei ist, dass das Date-Objekt von Javascript automatisch illegale Datumsangaben in logisch korrekte Datumsangaben umwandelt. Der "32. Januar" ist nach Datumslogik ein Tag nach dem 31. Januar, also wird das zum 1. Februar. Genauso funktioniert dieser Trick mit dem Schaltjahr: Wenn der 29. Februar eines Jahres existiert, wird das Datum "29.2." bleiben, ansonsten "1.3." werden. Javascript kennt die Schaltjahre und Nicht-Schaltjahre, also wird das Ergebnis korrekt sein. Zumindest sofern die Implementation des Kalenders im Javascript des jeweiligen Browsers korrekt vorgenommen wurde. :)  
        
       - Sven Rautenberg
      
      -- 
      "Love your nation - respect the others."
      
    3. @@Struppi:

      function isLeapYear(yr) {
        return new Date(yr,1,29).getDate()==29;
      }

      Das dürfte ziemlich uneffizient sein, ein Datumsobjekt zu erzeugen und dann dessen Methoden zu bemühen – wo doch nur eine numerische Auswertung der Jahreszahl vonnöten ist, was mit einem Einzeiler getan ist.

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
  2. Hallo Andreas,

    ich möchte eine Abfrage machen, ob das aktuelle Jahr ein Schaltjahr ist. Wie frage ich das am einfachsten ab?

    kennst du denn die Schaltjahr-Regel prinzipiell?

    Das Jahr x ist ein Schaltjahr, wenn x durch 4 teilbar ist, aber nicht durch 100, oder aber wenn x durch 400 teilbar ist. Diese Regel müsstest du nun als Formel aufschreiben. Tip: Um zu ermitteln, ob eine Zahl x ohne Rest durch y teilbar ist, bietet sich der Modulo-Operator an.

    Einfach wird es, wenn man diese drei Regeln schrittweise von hinten nach vorne anwendet:

    x ist durch 400 teilbar -> x ist ein Schaltjahr
     wenn nicht:
     x ist durch 100 teilbar -> x ist kein Schaltjahr
     wenn nicht:
     x ist durch 4 teilbar ->   x ist ein Schaltjahr
     wenn nicht ->              x ist kein Schaltjahr

    Daraus folgt (Beispiele):

    1896 war ein Schaltjahr: Ist durch 4 teilbar, aber nicht durch 100
     1900 war kein Schaltjahr: Ist zwar durch 4 teilbar, aber auch durch 100
     1988 war ein Schaltjahr: Ist durch 4 teilbar, aber nicht durch 100
     2000 war ein Schaltjahr: Ist durch 4 teilbar, aber auch durch 100 - aber auch durch 400

    Ist das Prinzip klar?

    So long,
     Martin

    --
    F: Was ist schneller: Das Licht oder der Schall?
    A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
  3. Hallo,

    ich möchte eine Abfrage machen, ob das aktuelle Jahr ein Schaltjahr ist. Wie frage ich das am einfachsten ab?

    Ich mach das ganz einfach so, indem ich die Wochentage für den 29.2. und den 1.3. eines Jahres bestimme. Sind diese Tage unterschiedlich, liegt ein Schaltjahr vor.

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. @@hotti:

      Ich mach das ganz einfach so, indem ich die Wochentage für den 29.2. und den 1.3. eines Jahres bestimme. Sind diese Tage unterschiedlich, liegt ein Schaltjahr vor.

      Das ist nicht einfach. Weder vom Programmieraufwand her (da ist die von Struppi angeführte Lösung noch einfacher) noch von Ausführungsaufwand her (da ist die von Martin angeführte und von mir verlinkte Lösung besser).

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
      1. hi Gunnar,

        Ich mach das ganz einfach so, indem ich die Wochentage für den 29.2. und den 1.3. eines Jahres bestimme. Sind diese Tage unterschiedlich, liegt ein Schaltjahr vor.

        Das ist nicht einfach. Weder vom Programmieraufwand her [..]

        Och was, das ist reine Arithmetik auf den Grundlagen von C.F. Gauss und J. Scaliger. Für jeden Script-Interpreter ein Klacks, die Zahlen, mit denen da ein bischen plusminus und mal gerechnet wird, sind immer noch tausendmal kleiner als die 32-Bit-Grenze.

        Gruss,
        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. hi Gunnar,

          Ich mach das ganz einfach so, indem ich die Wochentage für den 29.2. und den 1.3. eines Jahres bestimme. Sind diese Tage unterschiedlich, liegt ein Schaltjahr vor.

          Das ist nicht einfach. Weder vom Programmieraufwand her [..]

          Och was, das ist reine Arithmetik auf den Grundlagen von C.F. Gauss und J. Scaliger. Für jeden Script-Interpreter ein Klacks, die Zahlen, mit denen da ein bischen plusminus und mal gerechnet wird, sind immer noch tausendmal kleiner als die 32-Bit-Grenze.

          Siehe auch hier.

          Viele Grüße,
          Horst Klar

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.