Verschiedene DIVs in Wochenzyklus anzeigen
Jens.V
- javascript
Hallo
ich habe da mal eine Frage bezüglich einer Anzeige die in einem bestimmten Zyklus wechselt! z.B. per Divs die auf Hidden gesetzt sind 4 Stk. und die werden jenach Tagen angezeigt!
Wäre sowas möglich? Oder ist der Ansatz der Hiddendivs falsch?
Vielen dank Jens
Hi,
ich habe da mal eine Frage bezüglich einer Anzeige die in einem bestimmten Zyklus wechselt! z.B. per Divs die auf Hidden gesetzt sind 4 Stk. und die werden jenach Tagen angezeigt!
Wäre sowas möglich? Oder ist der Ansatz der Hiddendivs falsch?
Ob es der beste Ansatz ist weiß ich nicht, aber möglich ist es mit Sicherheit, und das sogar relativ einfach.
Mit getDay() kannst du den aktuellen Wochentag ermitteln. Je nach Wochentag kannst du dann mit mit display oder visibility das Div, das angezeigt werden soll, einblenden.
mfG,
steckl
Hallo
Ganz leicht sry das übersteigt mein Wissen :/ Könntest du mir evtl ein kleines bischen mehr helfen?
Grüße
Hi,
Ganz leicht sry das übersteigt mein Wissen
Aller Anfang ist schwer ...
Was kannst du denn schon alles?
:/ Könntest du mir evtl ein kleines bischen mehr helfen?
Bist du schon den Links von vorhin gefolgt und hast einen ersten Versuch unternommen?
Zeig doch mal, was du versucht hast und woran es gescheitert ist oder wo genau du hängst.
mfG,
steckl
Hi,
Ganz leicht sry das übersteigt mein Wissen
Aller Anfang ist schwer ...
Was kannst du denn schon alles?:/ Könntest du mir evtl ein kleines bischen mehr helfen?
Bist du schon den Links von vorhin gefolgt und hast einen ersten Versuch unternommen?
Zeig doch mal, was du versucht hast und woran es gescheitert ist oder wo genau du hängst.
Hi
Das getDay() ist ja schon ein guter Ansatz!
<script type="text/javascript">
var jetzt = new Date();
var TagInWoche = jetzt.getDay();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
</script>
Problem ist wie sage ich nun das die Divs am Sonntag z.B. gewechselt werden? Oder was ist wenn ich ein tägliches Wechseln will.
Vielen Dank
mfG,
steckl
Hi
Problem ist wie sage ich nun das die Divs am Sonntag z.B. gewechselt werden? Oder was ist wenn ich ein tägliches Wechseln will.
Schonmal dran gedacht, deinen Divs ID's zu verpassen, die Tagesnamen haben?
Hi,
Das getDay() ist ja schon ein guter Ansatz!
<script type="text/javascript">
var jetzt = new Date();
var TagInWoche = jetzt.getDay();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
</script>
>
> Problem ist wie sage ich nun das die Divs am Sonntag z.B. gewechselt werden? Oder was ist wenn ich ein tägliches Wechseln will.
Hast du soetwas gemeint:
~~~javascript
if ((TagInWoche == 0) || (TagInWoche == 1))
{
// Div1 anzeigen
}
else if (TagInWoche == 2)
{
// Div2 anzeigen
}
...
Jetzt musst du noch den DIVs unterschiedliche IDs (oder Klassen) geben, damit du den entsprechenden DIV ansprechen kannst.
mfG,
steckl
Hi,
Das getDay() ist ja schon ein guter Ansatz!
<script type="text/javascript">
var jetzt = new Date();
var TagInWoche = jetzt.getDay();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
</script>
> >
> > Problem ist wie sage ich nun das die Divs am Sonntag z.B. gewechselt werden? Oder was ist wenn ich ein tägliches Wechseln will.
>
> Hast du soetwas gemeint:
>
> ~~~javascript
> if ((TagInWoche == 0) || (TagInWoche == 1))
> {
> // Div1 anzeigen
> }
> else if (TagInWoche == 2)
> {
> // Div2 anzeigen
> }
> ...
>
Jetzt musst du noch den DIVs unterschiedliche IDs (oder Klassen) geben, damit du den entsprechenden DIV ansprechen kannst.
Hallo
bis jetzt sieht es so aus bei mir:
<script type="text/javascript">
var jetzt = new Date();
var TagInWoche = jetzt.getDay();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
if ((TagInWoche == 0) || (TagInWoche == 1))
{
document.getElementById("div1").style.visibility = "visible";
}
else if (TagInWoche == 5)
{
document.getElementById("div2").style.visibility = "visible";
}
</script>
</head>
<div id="anzeigen" style="width:400px; height:400px; border:1px solid #000; position:relative;">
<div id="div1" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 1</div>
<div id="div2" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 2</div>
<div id="div3" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 3</div>
<div id="div4" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 4</div>
</div>
Nur leider passiert nichts :/ Was mache ich falsch?
Viel dank
mfG,
steckl
Hi,
bis jetzt sieht es so aus bei mir:
<script type="text/javascript">
var jetzt = new Date();
var TagInWoche = jetzt.getDay();
var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");if ((TagInWoche == 0) || (TagInWoche == 1))
{
document.getElementById("div1").style.visibility = "visible";
}
else if (TagInWoche == 5)
{
document.getElementById("div2").style.visibility = "visible";
}
</script>
</head>
<div id="anzeigen" style="width:400px; height:400px; border:1px solid #000; position:relative;">
<div id="div1" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 1</div>
<div id="div2" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 2</div>
<div id="div3" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 3</div>
<div id="div4" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">Test 4</div>
</div>
>
> Nur leider passiert nichts :/ Was mache ich falsch?
1\. Versuche sinnvoll zu zitieren und zitiere nicht einfach das komplette Vorgaengerposting.
2\. du machst bis jetzt nur was, wenn TagInWoche 0,1 oder 5 ist. Heute ist aber Donnerstag, also Tag 4, wenn ich mich nicht irre.
3\. du greifst auf Elemente zu, die es zu diesem Zeitpunkt noch garnicht gibt, da sie erst weiter unten im Quellcode kommen.
=> Du solltest dein Script in eine function packen und es erst aufrufen, wenn die Seite fertig geladen ist (mit body onload="deineFunktion()").
Kennst du die Fehler-Konsole vom Firefox ("Extras -> Fehler-Konsole")? Sie ist sehr hilfreich um Fehler zu finden. In deinem Fall haette sie wohl in etwa 'document.getElementById("div2") is undefined' ausgegeben.
mfG,
steckl
» 1. Versuche sinnvoll zu zitieren und zitiere nicht einfach das komplette Vorgaengerposting.
Sry habe ich irgentwie nicht dran gedacht.
- du machst bis jetzt nur was, wenn TagInWoche 0,1 oder 5 ist. Heute ist aber Donnerstag, also Tag 4, wenn ich mich nicht irre.
Klar Tag 4 bin etwas durch den Wind :(
Mit der Funktion klappt das nun super und die Fehlerkonsole bleibt auch leer :)
Eine Frage noch wäre das script auch so zu erweitern das die Divs alle 7 wechseln also jede Woche einer stehen bleibt?
Vielen lieben dank.
Hi,
Sry habe ich irgentwie nicht dran gedacht.
Geht doch
- du machst bis jetzt nur was, wenn TagInWoche 0,1 oder 5 ist. Heute ist aber Donnerstag, also Tag 4, wenn ich mich nicht irre.
Klar Tag 4 bin etwas durch den Wind :(
Mir waere auch Freitag lieber :)
Mit der Funktion klappt das nun super und die Fehlerkonsole bleibt auch leer :)
Eine Frage noch wäre das script auch so zu erweitern das die Divs alle 7 wechseln also jede Woche einer stehen bleibt?
alle 7 Tage?
Da wirds schon etwas schwieriger.
Du kannst mit getTime() die Milisekunden seit dem 1.1.1970 bekommen. Das musst du dann auf Wochen umrechnen, das ganze dann runden und dann mit modulo den Divisionsrest mit 4 berechnen. Je nach Ergebnis kannst du dann wieder mit if /else den entsprechenden Div anzeigen.
Du solltest aber auch die Hinweise von Gunnar beachten. Wenn der Besucher JS deaktiviert hat sieht er garkeines der Divs.
Also waere eine Serverseitige Loesung (z.B. mit PHP oder Perl) am schoensten. Ansonsten vielleicht einen Alternativen Inhalt fuer Besucher ohne JS.
mfG,
steckl
alle 7 Tage?
Da wirds schon etwas schwieriger.Du kannst mit getTime() die Milisekunden seit dem 1.1.1970 bekommen. Das musst du dann auf Wochen umrechnen, das ganze dann runden und dann mit modulo den Divisionsrest mit 4 berechnen. Je nach Ergebnis kannst du dann wieder mit if /else den entsprechenden Div anzeigen.
Du solltest aber auch die Hinweise von Gunnar beachten. Wenn der Besucher JS deaktiviert hat sieht er garkeines der Divs.
Also waere eine Serverseitige Loesung (z.B. mit PHP oder Perl) am schoensten. Ansonsten vielleicht einen Alternativen Inhalt fuer Besucher ohne JS.
Also mit PHP weiss ich nun garnicht weiter und ich denke bei 2.4% die Javascript deaktiviert haben sollte das kein Problem sein! Ein noscriptbereich wird es trotzdem geben!
Aber das mit den Millisekunden und Runden finde ich jetzt echt heftig :/
Vielen Dank
mfG,
steckl
Hi,
Ein noscriptbereich wird es trotzdem geben!
Immerhin.
Aber das mit den Millisekunden und Runden finde ich jetzt echt heftig :/
Millisekunden / 1000 => Sekunden
Sekunden / 60 => Minuten
usw., bis du bei Wochen bist.
runden:
gerundet = Math.floor(ungerundet)
noch was unklar?
mfG,
steckl
Hello out there!
runden:
gerundet = Math.floor(ungerundet)noch was unklar?
Ja.
42.99 gerundet ergibt 43; floor(42.99) aber 42. ;-)
Und ja, Math.floor ist hier wohl performanter als parseInt().
See ya up the road,
Gunnar
Sorry, habs vorhin net kapiert, dass du im Prinzip fast das gleiche vorgeschlagen hast.
runden:
gerundet = Math.floor(ungerundet)noch was unklar?
Ja.
Du warst nicht gefragt
*SCNR*
42.99 gerundet ergibt 43; floor(42.99) aber 42. ;-)
... aber du hast natuerlich recht, wobei es eigentlich egal sein muesste, wie man genau rundet, ob auf oder ab oder kaufmaennisch. Man muesste immer Schritte von 7 tagen bekommen. Es variiert nur der Anfang eines Intervals, nicht aber die Laenge.
Und ja, Math.floor ist hier wohl performanter als parseInt().
Das kann ich nicht beurteilen, muesste man ausprobieren.
mfG,
steckl
Hallo
also so richtig sehe ich nicht durch aber nunja
ein ansatz:
var anzahl = 4;
var timestamp = new Date("2007 08 01").getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime-timestamp)/24/60/60/1000)%anzahl+1;
Weiter weiss ich im mom leider nicht!
Vielen Dank
Hi,
ein ansatz:
var anzahl = 4;
var timestamp = new Date("2007 08 01").getTime();
Geht das so? Schau dir mal [link:http://de.selfhtml.org/javascript/objekte/date.htm#allgemeines@title=Variante 3] an.
Und noch was: Wenn du es wie bei Variante 3 notierst ist der August Monat 7 und nicht 8.
var newtime = new Date().getTime();
var nr = Math.floor((newtime-timestamp)/24/60/60/1000)%anzahl+1;
Da fehlt noch der Faktor 7 fuer die Woche.
>
> Weiter weiss ich im mom leider nicht!
Wenn ich das richtig sehe steht in nr jetzt eine Zahl zwischen 1 und 4.
Jetzt kannst du wieder mit Hilfe einer Abfrage (genau wie vorher mit dem Wochentag) das entsprechende DIV einblenden.
Oder du sprichst das entsprechende div mit getElementById('div'+nr) an, falls du sie entsprechend benannt hast.
Zum testen kannst du dann ja bei timestamp einfach mal unterschiedliche Timestamps erzeugen. Das Resultat sollte sich dann alle 7 Tage aendern.
mfG,
steckl
Hallo
alos das script war wirklich für Täglich :) aber mal 7 geht wohl nicht so einfach oder?
<script type="text/javascript">
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date("2007 08 01").getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime-timestamp)/24/60/60/1000*7)%anzahl+1;
if (nr == 1)
{
document.getElementById("div1").style.visibility = "visible";
}
else if (nr == 2)
{
document.getElementById("div2").style.visibility = "visible";
}
else if (nr == 3)
{
document.getElementById("div3").style.visibility = "visible";
}
else if (nr == 4)
{
document.getElementById("div4").style.visibility = "visible";
}
}
</script>
</head>
<body onload="einblenden()">
<div id="anzeigen" style="width:400px; height:400px; border:1px solid #000; position:relative;">
<div id="div1" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">
Test 1
</div>
<div id="div2" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">
Test 2
</div>
<div id="div3" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">
Test 3
</div>
<div id="div4" style="position:absolute; top:0; left:0; width:400px; height:400px; visibility:hidden;">
Test 4
</div>
</div>
Oder habe ich da was falsch verstanden?
Vielen Dank
Sry ich wa da zu voreillig das Script läuft nun so wie es soll *7 geht perfekt! Musste nur die Div Reihenfolge umkehren weil sie vorher rückwärst liefen aber es läuft nun gut :)
Vielen Lieben Dank :)
Hello out there!
Sry ich wa da zu voreillig das Script läuft nun so wie es soll
_Jetzt_ bist du zu voreillig. Du solltest erstmal testen, bevor du behauptest, es liefe.
Dass 'var timestamp = new Date("2007 08 01").getTime();
' falsch ist, wurde dir bereits gesagt. Warum hast du das nicht berichtigt? Gehst du davon aus, dass wenn dein Browser fehlerhaften Code irgendwie interpretiert, es alle Browser gleichermaßen tun?
*7 geht perfekt!
Es geht? Hm, naja. Um perfekt zu gehen müsste es bloß noch das tun, was du beabsichtigst. Aber das es tut nicht.
Bereits in zweiten Satz meines ersten Postings hatte ich gesagt, wie zu rechnen ist.
aber es läuft nun gut :)
Nein. Es läuft falsch oder gar nicht, je nach Browser.
See ya up the road,
Gunnar
hi Gunnar
da war ich wohl in der Tat etwas zu voreilig :/ Und ich muss zugeben ich habe dein erstet Postig nicht gesehen :( Habe mich aber nun daran gemacht und habe bis jetzt das:
var jetzt = new Date();
var millisek = jetzt.getTime();
var tag = Math.floor((millisek)/1000/60/60/24/7);
Leider weiss ich nicht ganz wie du das mit dem parseInt() Ganzzahl meinst!
Vieln dank Jens
Hi,
da war ich wohl in der Tat etwas zu voreilig :/ Und ich muss zugeben ich habe dein erstet Postig nicht gesehen :( Habe mich aber nun daran gemacht und habe bis jetzt das:
var jetzt = new Date();
var millisek = jetzt.getTime();
var tag = Math.floor((millisek)/1000/60/60/24/7);
Der Code von vorhin war doch schon nah an der Loesung deines Problems dran.
Hast du mal versucht, das "`var timestamp = new Date("2007 08 01").getTime();`{:.language-javascript} umzubauen? Ansonsten sehe ich auf die Schnelle keine weiteren Fehler mehr.
> Leider weiss ich nicht ganz wie du das mit dem parseInt() Ganzzahl meinst!
Er hat dir doch einen Link mit angegeben. Aber in deinem Fall macht parseInt() nichts anderes als Math.floor().
mfG,
steckl
Hallo
ich habe mal "var timestamp = new Date("2007 08 01").getTime();
rausgenommen...bekomme nun auch eine Ausgabe im IE beide Broswer geben mir DiV3 aus! Weiss aber auch nicht wie ich es jetzt testen kann ob es wirklich alle 7 tage wechselt!
Grüsse
<script type="text/javascript">
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date().getTime();
var nr = Math.floor((timestamp)/24/60/60/1000*7)%anzahl+1;
if (nr == 1)
{
document.getElementById("div1").style.visibility = "visible";
}
else if (nr == 2)
{
document.getElementById("div2").style.visibility = "visible";
}
else if (nr == 3)
{
document.getElementById("div3").style.visibility = "visible";
}
else if (nr == 4)
{
document.getElementById("div4").style.visibility = "visible";
}
}
</script>
Hi,
ich habe mal
"var timestamp = new Date("2007 08 01").getTime();
rausgenommen...
Ich haette es nicht rausgenommen, sondern nur syntaktisch richtig geschrieben. Wie das geht kannst du
hier (habe ich dir vorher schonmal verlinkt) nachlesen.
Ob in timestamp dann der von dir gewuenschte Wert steht kannst du mit den Methoden vom Date-Objekt (z.B. getDate() oder getMonth()) ueberpruefen.
Weiss aber auch nicht wie ich es jetzt testen kann ob es wirklich alle 7 tage wechselt!
Du kannst deine Variablen (mit Hilfe des Links) mit "new Date" auf ein beliebiges Datum setzen. Wenn du das variierst sollte alle sieben Tage was anderes angezeigt werden.
var nr = Math.floor((timestamp)/24/60/60/1000*7)%anzahl+1;
^
Das waeren siebtel Tage und nicht sieben Tage.
mfG,
steckl
Hallo
bin inzwischen total verwirrt aber hoffe ich komm der Sache immer Näher und es bleibt was hängen :)
<script type="text/javascript">
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date(2007, 0, 0).getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime-timestamp)/24/60/60/1000/7)%anzahl+1;
alert (nr);
if (nr == 1)
{
document.getElementById("div1").style.visibility = "visible";
}
else if (nr == 2)
{
document.getElementById("div2").style.visibility = "visible";
}
else if (nr == 3)
{
document.getElementById("div3").style.visibility = "visible";
}
else if (nr == 4)
{
document.getElementById("div4").style.visibility = "visible";
}
}
</script>
Wenn ich das Datum um 7 erhöhe wechseln die Divs und diesmal auch im IE (IE7 zumindest) Was mir komisch vorkommt bei new Date(2007, 0, 0) fängt er bei Div3 an...wenn ich um 7 erhöhe kommt Div2 also rückwärts!
Grüsse
Hello out there!
Wenn ich das Datum um 7 erhöhe wechseln die Divs und diesmal auch im IE (IE7 zumindest) Was mir komisch vorkommt bei new Date(2007, 0, 0) fängt er bei Div3 an...wenn ich um 7 erhöhe kommt Div2 also rückwärts!
Du hast ja vor timestamp noch ein Minuszeichen: Math.floor((newtime-timestamp)/...
See ya up the road,
Gunnar
Du hast ja vor timestamp noch ein Minuszeichen: Math.floor((newtime-timestamp)/...
Also du meinst das newtime weglassen? Habe ich auch probiert
var anzahl = 4;
var timestamp = new Date(2007, 0, 8).getTime();
var nr = Math.floor((timestamp)/24/60/60/1000/7)%anzahl+1;
alert (nr);
Dann fängt er zwar trotzdem bei Div3 an aber zählt vorwärts...
auch würde gehen:
var anzahl = 4;
var timestamp = new Date(2007, 0, 0).getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime+timestamp)/24/60/60/1000/7)%anzahl+1;
alert (nr);
Dann fängt er bei 4 an aber zählt auch vorwärts...was wäre jetzt die besere Methode? Oder spielt das keine rolle mehr?
Wegen regestrieren habe ich schon probiert aber der will meine Email nicht "Scheint falsch zu seien" bestimmt weil ich einen Punkt drin habe! Werde mal ne neue anlegen!
Grüsse
See ya up the road,
Gunnar
Hi,
bin inzwischen total verwirrt aber hoffe ich komm der Sache immer Näher und es bleibt was hängen :)
Bestimmt, immerhin weisst du schonmal wie man von Millisekunden auf Wochen kommt ;-)
var timestamp = new Date(2007, 0, 0).getTime();
Anmerkung: Der erste 1.Januar 07 ist "Date(2007,0,1)".
Wenn ich das Datum um 7 erhöhe wechseln die Divs und diesmal auch im IE (IE7 zumindest) Was mir komisch vorkommt bei new Date(2007, 0, 0) fängt er bei Div3 an...wenn ich um 7 erhöhe kommt Div2 also rückwärts!
Das stimmt schon so. Du berechnetst ja den Unterschied zwischen Jetzt (newtime) und dem 0.1.07 (timestamp).
Der abstand zwischen den beiden Zeiten (newtime-timestamp) verkleinert sich ja, wenn du timestamp erhoehst, darum kommt dann div2. Wenn dein Script fertig ist wird sich aber timestamp nicht mehr aendern, sondern nur noch newtime und somit wird der Unterschied immer groesser. Dann sollten die Divs in in der richtigen Reihenfolge nacheinander angezeigt werden.
Wenn du den Wechsel an einem bestimmten Wochentag erzielen willst musst du dann noch timestamp auf so einen Wochentag setzen, z.B. auf gestern, wenn du immer Donnerstags wechseln willst.
mfG,
steckl
Hi,
bin inzwischen total verwirrt aber hoffe ich komm der Sache immer Näher und es bleibt was hängen :)
Bestimmt, immerhin weisst du schonmal wie man von Millisekunden auf Wochen kommt ;-)
var timestamp = new Date(2007, 0, 0).getTime();
Anmerkung: Der erste 1.Januar 07 ist "Date(2007,0,1)".
Wurde geandert :)
Wenn dein Script fertig ist wird sich aber timestamp nicht mehr aendern, sondern nur noch newtime und somit wird der Unterschied immer groesser. Dann sollten die Divs in in der richtigen Reihenfolge nacheinander angezeigt werden.
Ist denn das Script jetzt fertig?
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date(2007,7,20).getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime+timestamp)/24/60/60/1000/7)%anzahl+1;
if (nr == 1)
{
document.getElementById("div1").style.visibility = "visible";
}
else if (nr == 2)
{
document.getElementById("div2").style.visibility = "visible";
}
else if (nr == 3)
{
document.getElementById("div3").style.visibility = "visible";
}
else if (nr == 4)
{
document.getElementById("div4").style.visibility = "visible";
}
}
</script>
ich habe den 20.07.2007 als start festegelgt weil er bei dem Datum mir DIV1 ausspukt...also müsste er morgen auf DIV2 springen oder (der 20.07 war ein Freitag) könnte auch den 03.08.2007 aber da kommt DIv3 :)
Viele Grüsse Jens
Hi,
Ist denn das Script jetzt fertig?
Wenn es wie gewuenscht funktioniert schon, aber das macht es ja nach deiner Aussage weiter unten noch nicht.
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date(2007,7,20).getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime+timestamp)/24/60/60/1000/7)%anzahl+1;
Was ist (newtime+timestamp)? An der Stelle sollte der Zeitunterschied zwischen newtime und timestamp hin (finde ich zumindest;).
Das geht genauso, wie wenn du den Unterschied zwischen zwei ganz normalen Zahlen berechnest.
if (nr == 1)
{
document.getElementById("div1").style.visibility = "visible";
}
else if (nr == 2)
{
document.getElementById("div2").style.visibility = "visible";
}
else if (nr == 3)
{
document.getElementById("div3").style.visibility = "visible";
}
else if (nr == 4)
{
document.getElementById("div4").style.visibility = "visible";
}
Wenn die DIVs wirklich so heissen kannst du diesen kompletten if-else-Block auch durch
document.getElementById("div"+nr).style.visibility = "visible";
ersetzen.
}
</script>
>
> ich habe den 20.07.2007 als start festegelgt weil er bei dem Datum mir DIV1 ausspukt...also müsste er morgen auf DIV2 springen oder (der 20.07 war ein Freitag) könnte auch den 03.08.2007 aber da kommt DIv3 :)
Dass das funktioniert ist mehr oder weniger Zufall. Du hast immer noch nicht verstanden, was das Script eigentlich macht, oder?
Wie sich dein Script morgen verhaelt kannst du testen, wenn du newtime wie folgt berechnest:
`var newtime = new Date(2007,7,4).getTime();`{:.language-javascript}
Wenn du das Verhalten zu einer Bestimmten Uhrzeit berechnen willst kannst du die Zeit noch zusaetzlich bei Date(jahr, monat, tag, stunden, minuten, sekunden) angeben.
mfG,
steckl
Gut also ich habe es mit var newtime = new Date(2007,8,4).getTime(); gemacht und er wechselt wechselt auch am 2007,8,11 und habe auch den if-else-Block ersetzt!
Viel Dank :)
Hi,
Gut also ich habe es mit var newtime = new Date(2007,8,4).getTime(); gemacht
Aber hoffentlich nur zum testen, später musst du die Werte aus der Klammer natürlich wieder wegnehmen, damit in newtime immer das aktuelle Datum steht.
und er wechselt auch am 2007,8,11 und habe auch den if-else-Block ersetzt!
Viel Dank :)
Wie ich schon sagte, es ist "relativ einfach" ;-)
mfG,
steckl
Hallo
zu früh gefreut? Es hat nicht umgeschalten heute :(
<script type="text/javascript">
function einblenden ()
{
var anzahl = 4;
var timestamp = new Date(2007, 7, 20, 8, 0, 0).getTime();
var newtime = new Date().getTime();
var nr = Math.floor((newtime+timestamp)/24/60/60/1000/7)%anzahl+1;
document.getElementById("div"+nr).style.visibility = "visible";
}
</script>
Finde es komisch weil wenn ich bei
var newtime = new Date(2007, 8, 4, 9, 0, 0).getTime();
eintrage springt er sofort weiter nehm ich es wieder raus geht er wieder zurückt!
Ich weiss leider nicht weiter :/
Grüsse
Hi,
var timestamp = new Date(2007, 7, 20, 8, 0, 0).getTime();
Das ist der 20. August (!) um 8 Uhr.
var newtime = new Date().getTime();
Das ist der aktuelle Zeipunkt (momentan 5. August)
"(newtime+timestamp)" muss immernoch "(newtime-timestamp)" heißen.
var newtime = new Date(2007, 8, 4, 9, 0, 0).getTime();
Das ist der 4. September um 9Uhr.
mfG,
steckl
Hello out there!
if (nr == 1)
else if (nr == 2)
else if (nr == 3)
else if (nr == 4)
Bei Gelegenheit kannst du dir auch mal die <http://de.selfhtml.org/javascript/sprache/bedingt.htm#switch@title=Fallunterscheidung mit "switch"> ansehen.
See ya up the road,
Gunnar
Hello out there!
Und ich muss zugeben ich habe dein erstet Postig nicht gesehen :(
Lass dich registrieren, dann kannst du in deinen Nutzereinstellungen festlegen, wie schon gelesenen Postings markiert werden sollen. Dann passiert dir sowas nicht.
var jetzt = new Date();
var millisek = jetzt.getTime();
var tag = Math.floor((millisek)/1000/60/60/24/7);
Sieht doch ganz gut aus.
Leider weiss ich nicht ganz wie du das mit dem parseInt() Ganzzahl meinst!
Das meine ich gar nicht mehr, da (wie steckl nachgeprüft hat) Math.floor() schneller ist und deshalb verwendet werden sollte.
See ya up the road,
Gunnar
Hi,
Und ja, Math.floor ist hier wohl performanter als parseInt().
Das kann ich nicht beurteilen, muesste man ausprobieren.
Habs ausprobiert. Math.floor() war 4mal schneller als parseInt(), Wobei das bei einem Durchlauf wohl egal ist.
mfG,
steckl
Hello out there!
ich habe da mal eine Frage bezüglich einer Anzeige die in einem bestimmten Zyklus wechselt! z.B. per Divs die auf Hidden gesetzt sind 4 Stk. und die werden jenach Tagen angezeigt!
Du holst dir den Zeitpunkt mit http://de.selfhtml.org/javascript/objekte/date.htm#get_time@title=getTime(); da dieses in JavaScript Millisekunden liefert, dividierst du durch die Anzahl der Millisekunden, die ein Tag hat. Dann dividierst du noch durch die Anzahl der Tage, aller derer du wechseln willst; dann machst du daraus noch mit http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt() eine Ganzzahl. Mittels http://de.selfhtml.org/javascript/sprache/operatoren.htm#berechnung@title=Modulo-Division durch die Anzahl der zu wechselnden Boxen (in deinem Fall gegenwärtig 4) erhältst du den Index (Zählung bei 0 beginnend) derjenigen, die du aktuell anzeigen möchtest.
Bedenke auch, was passiert, wenn Nutzer kein JavaScript aktiviert haben.
Wäre sowas möglich? Oder ist der Ansatz der Hiddendivs falsch?
Der Ansatz, das mit JavaScript zu tun, ist – ähm unglücklich. Da du das Ganze besser vom Server erledigen lässt, ist PHP das Mittel deiner Wahl. Der Algorithmus ist der gleiche; nur dass time() nicht Millisekunden liefert, sondern Sekunden. Anhand des ermittelten Index wählst du nur die eine Box aus, die angezeigt werden soll; die anderen musst du gar nicht erst zum Client übertragen.
See ya up the road,
Gunnar
Hab doch mal überlegt es evtl Serverseitig umzusetzten. Das Javascript läuft und erfüllt auch seinen zweck aber kann ja nicht schaden :)
Komme da aber leider im mom nicht weiter :(
<?php
$anzahl = 4;
$newDate = mktime(0,0,0, 8, 1, 2007);
$newtime = time();
$diffDate = ($newDate-$actDate);
$days = floor($diffDate / 24 / 60 / 60 / 7)%anzahl+1;
echo $days;
?>
Die Ausgabe von $days ist immer 1 ?
Viele grüße :)
Hello out there!
$newtime = time();
Benutzt du das irgendwo?
$diffDate = ($newDate-$actDate);
Welchen Wert hat $actDate
?
See ya up the road,
Gunnar
Hello out there!
$newtime = time();
Benutzt du das irgendwo?
Natürlich sollte es benutzt werden undwzar anstelle von $actDate hab mich da vertan :/
Hab auch %anzahl+1 ersetzt durch $anzahl bekomme aber nun genau in dieser Zeile ein Fehler:
Parse error: parse error, unexpected T_VARIABLE in /var/www/xxx.de/public_html/index.php on line 8
Script so im Moment:
<?php
echo error_reporting(E_ALL);
$anzahl = 4;
$newDate = mktime(0,0,0, 8, 1, 2007);
$newtime = time();
$diffDate = ($newDate-$newtime);
$days = floor($diffDate / 24 / 60 / 60 / 7)$anzahl+1;
echo $days;
?>
Vielen Dank
Hello out there!
$days = floor($diffDate / 24 / 60 / 60 / 7)$anzahl+1;
Welcher Operator sollte denn zwischen $days = floor($diffDate / 24 / 60 / 60 / 7) und $anzahl stehen?
See ya up the road,
Gunnar
Hello out there!
$days = floor($diffDate / 24 / 60 / 60 / 7)$anzahl+1;
Welcher Operator sollte denn zwischen $days = floor($diffDate / 24 / 60 / 60 / 7) und $anzahl stehen?
Hab das Modulo vor $anzahl gesetzt :)
Noch mal das Aktuelle Skript:
<?php
echo error_reporting(E_ALL);
$anzahl = 4;
$newDate = mktime(0,0,0, 8, 1, 2007);
$newtime = time();
$diffDate = ($newDate-$newtime);
$days = floor($diffDate / 24 / 60 / 60 / 7)%$anzahl+1;
echo $days;
?>
&days gibt nun 2039-1 ^^
Grüße
See ya up the road,
Gunnar
Also habe nochmal leicht verändern aber es tut sich einfach nix :(
<?php
echo error_reporting(E_ALL);
$anzahl = 4;
$newDate = mktime(0,0,0, 8, 7, 2007);
$newtime = time();
$days = floor(($newDate-$newtime) / 24 / 60 / 60 / 7)%$anzahl+1;
echo $days;
?>
Irgentwas stimmt doch da nicht.
Grüße :)
Hi,
<?php
echo error_reporting(E_ALL);$anzahl = 4;
$newDate = mktime(0,0,0, 8, 1, 2007);
$newtime = time();
$diffDate = ($newDate-$newtime);
$days = floor($diffDate / 24 / 60 / 60 / 7)%$anzahl+1;echo $days;
?>
> &days gibt nun 2039-1 ^^
Du meinst $days?
Sagt dir der Begriff debuggen was?
Lasse dir mit echo (oder vardump) an den Stellen, wo du dir nicht sicher bist, was in den Variablen steht, anzeigen, was sie enthalten.
Mit "echo floor($diffDate/24/60/60/7)" kannst du dir auch den Wert von einzelnen Teilausdruecken ansehen.
Wenn du dir einen Wert nicht erklaeren kannst frag nochmal nach.
mfG,
steckl
Hallo
ich habe es mal mit dem echo floor($diffDate /24 / 60 / 60 /7); gemacht und da ist ein Wert du so doch eigentlich nicht sein kann oder?
2039-2
Grüße
Hi,
ich habe es mal mit dem echo floor($diffDate /24 / 60 / 60 /7); gemacht und da ist ein Wert du so doch eigentlich nicht sein kann oder?
2039-2
Das ist komischerweise keine Zahl, sondern eher ein String. floor sollte aber eine Float-Zahl zurueckgeben.
Pruefe doch weiter und schaue was in $diffDate steht.
mfG,
steckl
Hallo
$diffdate gibt einen ähnlichen String zurück
2039-662180 bei jeden Aufruf wird um 1 erhöht!
grüße
Hi,
$diffdate gibt einen ähnlichen String zurück
2039-662180 bei jeden Aufruf wird um 1 erhöht!
Dann ist es wohl hier schon zu spaet und die Ursache liegt weiter vorne.
Ueberleg doch mal selbst, wo dieser String wieder herkommen koennte.
mfG,
steckl
Danke an alle beteidigten aber es gelöst und die beiden Scripten laufen nun als PHP sowie auch JS
Vielen lieben Dank und bis bald :)
Jens
Hi,
Danke an alle beteidigten aber es gelöst und die beiden Scripten laufen nun als PHP sowie auch JS
Vielleicht interessiert es später mal jemanden, der das gleiche Problem hat, wie denn die Lösung dazu aussieht.
Dann wäre es gut (für ihn), wenn sie auch in diesem Thread zu finden wäre.
mfG,
steckl
Vielleicht interessiert es später mal jemanden, der das gleiche Problem hat, wie denn die Lösung dazu aussieht.
Dann wäre es gut (für ihn), wenn sie auch in diesem Thread zu finden wäre.
Da hst du natürlich recht :)
<?php
error_reporting(E_ALL);
$anzahl = 4;
$newDate = mktime(0,0,5, 8, 3, 2007);
$newtime = time();
$diffDate = ($newtime-$newDate);
$days =($diffDate/604800)%$anzahl+1;
if ($days == 1) $anzeige1 ="visible"; else $anzeige1="hidden";
if ($days == 2) $anzeige2 ="visible"; else $anzeige2="hidden";
if ($days == 3) $anzeige3 ="visible"; else $anzeige3="hidden";
if ($days == 4) $anzeige4 ="visible"; else $anzeige4="hidden";
?>
<div id="1" style="visibility:<?php echo $anzeige1 ?>; position:absolute; top:0; left:0;">
div1
</div>
<div id="2" style="visibility:<?php echo $anzeige2 ?>; position:absolute; top:0; left:0;">
div2
</div>
<div id="3" style="visibility:<?php echo $anzeige3 ?>; position:absolute; top:0; left:0;">
div3
</div>
<div id="4" style="visibility:<?php echo $anzeige4 ?>; position:absolute; top:0; left:0;">
div4
</div>
Über das ausgeben der Divs kann mich sich streiten. Ich habe mich für diese Variate entschieden weil das Script für jemanden ist der nur HTML kann, und mich gebeten hat ausserhalbs von PHP die Div zu schreiben.
Grüße
Hi,
$days = floor($diffDate / 24 / 60 / 60 / 7)$anzahl+1;
Gibt es die Funktion floor() in PHP (ich kenn mich da nicht aus)?
Vor Anzahl fehlt ein Rechenoperator (in deinem Fall Modulo).
mfG,
steckl
Hello out there!
Du bist heut immer ein Minütchen zu langsam. ;-)
Damit, dass du erst http://php.net/ wälzen würdest, kannste dich nicht rausreden:
Gibt es die Funktion floor() in PHP (ich kenn mich da nicht aus)?
http://de2.php.net/manual/de/function.floor.php
See ya up the road,
Gunnar
Hi,
Du bist heut immer ein Minütchen zu langsam. ;-)
Vielleicht is einfach nur deine Inet-Verbindung schneller? ;)
Damit, dass du erst http://php.net/ wälzen würdest, kannste dich nicht rausreden
Schon, aber warum soll ich das machen, wenn ich garnicht PHP lernen will?
mfG,
steckl
Hi,
<?php
$anzahl = 4;
$newDate = mktime(0,0,0, 8, 1, 2007);
$newtime = time();
$diffDate = ($newDate-$actDate);
was ist $actDate?
$days = floor($diffDate / 24 / 60 / 60 / 7)%anzahl+1;
"anzahl" muss "$anzahl" heissen. Ob der Modulo-Operator in PHP der gleiche ist wie in Javascript weiss ich nicht.
echo $days;
?>
>
> Die Ausgabe von $days ist immer 1 ?
Bekommst du da keine Fehlermeldungen? Mit [error_reporting()](http://us2.php.net/error_reporting) kannst du das irgendwie einstellen.
mfG,
steckl
Hello out there!
Ob der Modulo-Operator in PHP der gleiche ist wie in Javascript weiss ich nicht.
Isser. [http://de3.php.net/manual/de/language.operators.arithmetic.php]
See ya up the road,
Gunnar