Bernd: Countdown bestimmtem Tag jedes Monat Problem getMonth, getYear

Hallo!

Ich habe folgendes Script:

  
    <script language="JavaScript">  
  
      var jahr=2012, monat=2, tag=20, stunde=0, minute=0, sekunde=0;  
      var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);  
  
      function countdown() {  
        startDatum=new Date();  
        if(startDatum<zielDatum)  {  
  
       var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;  
  
          while(startDatum<zielDatum) {  
            jahre++;  
            startDatum.setFullYear(startDatum.getFullYear()+1);  
          }  
          startDatum.setFullYear(startDatum.getFullYear()-1);  
          jahre--;  
  
          while(startDatum<zielDatum) {  
            monate++;  
            startDatum.setMonth(startDatum.getMonth()+1);  
          }  
          startDatum.setMonth(startDatum.getMonth()-1);  
          monate--;  
  
          while(startDatum.getTime()+(24*60*60*1000)<zielDatum) {  
            tage++;  
            startDatum.setTime(startDatum.getTime()+(24*60*60*1000));  
          }  
  
          stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));  
          startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);  
  
          minuten=Math.floor((zielDatum-startDatum)/(60*1000));  
          startDatum.setTime(startDatum.getTime()+minuten*60*1000);  
  
          sekunden=Math.floor((zielDatum-startDatum)/1000);  
  
          (jahre!=1)?jahre=jahre+" Jahre,  ":jahre=jahre+" Jahr,  ";  
          (monate!=1)?monate=monate+" Monate,  ":monate=monate+" Monat,  ";  
          (tage!=1)?tage=tage+" Tage,  ":tage=tage+" Tag,  ";  
          (stunden!=1)?stunden=stunden+" Stunden,  ":stunden=stunden+" Stunde,  ";  
          (minuten!=1)?minuten=minuten+" Minuten  und  ":minuten=minuten+" Minute  und  ";  
          if(sekunden<10) sekunden="0"+sekunden;  
          (sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";  
  
          document.countdownform.countdowninput.value=  
              jahre+monate+tage+stunden+minuten+sekunden;  
  
          setTimeout('countdown()',200);  
        }  
        else document.countdownform.countdowninput.value=  
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";  
      }  
    </script>  

nun habe ich versucht, mit

  
[....]  
var now = new Date();  
var jahre = now.getYear();  
var monate = now.getMonth();  
var tag=20, stunde=0, minute=0, sekunde=0;  
var zielDatum=new Date(jahr,monat,tag,stunde,minute,sekunde);  
[....]  
</script>  

Einzustellen, dass er jedes Monat den 20. Tag anzeigt. z.B. "20.02, 20.03, 20.04, etc.
Doch irgendwie zeigt er mir immer wenn ich "getYear()" oder "getMonth()" verwende, GARNICHTS mehr an!
Setze ich das nun wieder zurück auf "2012" bzw "02" dann funktioniert die Anzeige perfekt.
Hätte das nur gerne Automatisch!

Hoffe auf baldige Antwort
Lg

  1. var now = new Date();
    var jahre = now.getYear();
    var monate = now.getMonth();
    var tag=20, stunde=0, minute=0, sekunde=0;
    var zielDatum=new Date(jahr,monat,tag,stunde,minute,sekunde);

    Erst einmal hast du hier einen Fehler drin, die Variablen heißen einmal jahre/monate und später jahr/monat.

    Dann schau dir mal an, was getYear für einen Wert zurückliefert.
    Und lies die Dokumentation dieser Methode in SELFHTML.
    http://de.selfhtml.org/javascript/objekte/date.htm#get_year
    Dabei wirst du feststellen, dass du eher http://de.selfhtml.org/javascript/objekte/date.htm#get_full_year@title=getFullYear suchst.

    Mathias

    1. Erst einmal hast du hier einen Fehler drin, die Variablen heißen einmal jahre/monate und später jahr/monat.

      Dann schau dir mal an, was getYear für einen Wert zurückliefert.
      Und lies die Dokumentation dieser Methode in SELFHTML.
      http://de.selfhtml.org/javascript/objekte/date.htm#get_year
      Dabei wirst du feststellen, dass du eher http://de.selfhtml.org/javascript/objekte/date.htm#get_full_year@title=getFullYear suchst.

      Mathias

      Nun, habe jetzt das hier gemacht:

        
      <script language="JavaScript">  
            var now = new Date();  
            var jahr= now.getFullYear(), monat=now.getMonth(), tag=20, stunde=0, minute=0, sekunde=0;  
            var zielDatum=new Date(jahr,monat,tag,stunde,minute,sekunde);  
      [...]  
      </script>  
      
      

      Und jetzt zeigt er mir alles auf 0 an... mh!

      Lg

      1. Und jetzt zeigt er mir alles auf 0 an... mh!

        Weil heute der 23. Januar 2012 ist und du als Zieldatum den 20. Januar 2012 angibst.

        Wenn du den Folgemonat willst, wenn der 20. des aktuellen Monats überschritten ist, musst du eine entsprechende Abfrage schreiben basierend auf dem aktuellen Tag des Monats.

        Mathias

        1. Und jetzt zeigt er mir alles auf 0 an... mh!

          Weil heute der 23. Januar 2012 ist und du als Zieldatum den 20. Januar 2012 angibst.

          Wenn du den Folgemonat willst, wenn der 20. des aktuellen Monats überschritten ist, musst du eine entsprechende Abfrage schreiben basierend auf dem aktuellen Tag des Monats.

          Mathias

          Danke für deine schnelle Antwort!
          Aber macht das:

            
                    while(startDatum<zielDatum) {  
                      monate++;  
                      startDatum.setMonth(startDatum.getMonth()+1);  
                    }  
                    startDatum.setMonth(startDatum.getMonth()-1);  
                    monate--;  
          
          

          nicht genau die Überprüfung?

          1. Aber macht das:

            while(startDatum<zielDatum) {
                        monate++;
                        startDatum.setMonth(startDatum.getMonth()+1);
                      }
                      startDatum.setMonth(startDatum.getMonth()-1);
                      monate--;

            
            > nicht genau die Überprüfung?  
              
            Gegeben sind:  
              
            startDatum = 23. Januar 2012 17:41 (jetzt)  
            zielDatum  = 20. Januar 2012  0:00  
              
            Dann fragst du ab:  
              
            `if(startDatum<zielDatum)  {`{:.language-javascript}  
              
            Diese Bedingung ist nicht erfüllt. Else-Zweig wird ausgeführt:  
              
            ~~~javascript
            else document.countdownform.countdowninput.value=  
                        "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
            

            So richtig verstehe ich deinen Code nicht, denn für einen Countdown muss das startDatum (heute) natürlich zeitlich vor dem zielDatum liegen. Dein Code dreht das irgendwie um, indem er das startDatum weiter in die Vergangenheit legt, anstatt das zielDatum korrekt in der Zukunft zu verorten.

            Mathias

            1. Gegeben sind:

              startDatum = 23. Januar 2012 17:41 (jetzt)
              zielDatum  = 20. Januar 2012  0:00

              Dann fragst du ab:

              if(startDatum<zielDatum) {

              Diese Bedingung ist nicht erfüllt. Else-Zweig wird ausgeführt:

              else document.countdownform.countdowninput.value=

              "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";

              
              >   
              > So richtig verstehe ich deinen Code nicht, denn für einen Countdown muss das startDatum (heute) natürlich zeitlich vor dem zielDatum liegen. Dein Code dreht das irgendwie um, indem er das startDatum weiter in die Vergangenheit legt, anstatt das zielDatum korrekt in der Zukunft zu verorten.  
              >   
              > Mathias  
                
              Ist auch nicht mein Code! Deswegen komm ich wohl ned auf den Fehler drauf denn,  
              ~~~javascript
                
              	  var now = new Date();  
                    var jahr= now.getFullYear();  
              	  var monat=now.getMonth();  
              	  var akttag = now.getDay();  
                    var tag=20, stunde=0, minute=0, sekunde=0;  
              	  if(akttag > tag)  
              	  {  
              		 monat++;  
              	  }  
              	  
                    var zielDatum=new Date(jahr,monat,tag,stunde,minute,sekunde);  
              
              

              funktioniert auch nicht. Setze ich aber var tag=20 auf z.B. 25, zeigt er mir es korrekt an, oder Monat +1.

              Nun kennst Du ein besseres Script, was mir die Dauer bis zu einem bestimmten Tag anzeigt?

              Lg
              Bernd

              1. Hallo Bernd,

                Nun kennst Du ein besseres Script, was mir die Dauer bis zu einem bestimmten Tag anzeigt?

                kennst du Wieviele Tage sind vergangen?

                Gruß, Jürgen