Countdown bestimmtem Tag jedes Monat Problem getMonth, getYear
Bernd
- javascript
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
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
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
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
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?
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
Gegeben sind:
startDatum = 23. Januar 2012 17:41 (jetzt)
zielDatum = 20. Januar 2012 0:00Dann 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
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