Andreas Korthaus: ich verzweifele mal wieder an Javascript...

Hallo!

Javascript hat irgndwas gegen mich, und ich hab auch was gegen Javascript. Ich probiere jetzt was weiß ich wie lange ein ganz blödes Countdown-Script hinzubekommen, aber es will einfach nicht. Das Script an sich ist kein Problem, nur möchte ich gerne die Zeitdifferenz zwischen Server und Client ausgleichen, das versuche ich wie folgt:

var servertime = new Date ("<?php echo date ("F j, Y H:i:s");?>");
  // z.B.: var servertime = new Date ("November 14, 2002 02:59:10");
var eventdate = new Date ("<?php echo date ("F j, Y H:i:s",time()+100);?>");
  // z.B.: var eventdate = new Date ("November 14, 2002 03:00:50");
var localtime = new date();
var diff = localtime.getTime() - servertime.getTime();

function toSt(n) {
 s = ""
 if (n < 10) s += "0"
   return s + n.toString();
}

function countdown() {
 cl = document.clock;
 d = new Date();
 var count = Math.floor((eventdate.getTime() - d.getTime() + diff) / 1000);

var Sekunden = toSt(count % 60);
 count = Math.floor(count / 60);
 var Minuten = toSt(count % 60);
 count = Math.floor(count / 60);
 var Stunden = toSt(count % 24);
 count = Math.floor(count / 24);
 var Tage = count;
 if (Tage > 1) {
  var Tage_string = Tage + " Tage, ";
 }
 else if (Tage == 1) {
  var Tage_string = Tage + " Tag, ";
 }
 else {
  var Tage_string = "";
 }

var Gesamt = Tage_string + Stunden + ":" + Minuten + ":" + Sekunden;

if(DHTML) {
   if(NS) setCont("id","Uhr",null,"<span class="Uhr">" + Gesamt + "</span>");
   else   setCont("id","Uhr",null,Gesamt);
}
else return;

window.setTimeout("countdown()",1000);

}

Ohne mein "diff" funktioniert es einwandfrei, nur mit nicht. Es wird nichts ausgegeben. Wenn ich in der Zeile

var count = Math.floor((eventdate.getTime() - d.getTime() + diff) / 1000);

"+ diff" weglasse wird der Countdown angezeigt, aber halt mit Zeitdifferenz zw. Server und Client.

Dann habe ich mir diff mal ausgeben lassen, und da steht "undefined". Verstehe ich überhaupt nicht. Habe absolut keine Idee woran das liegen könnte und stehe kurz davor meinen Monitor aus dem Fenster zu schmeißen :-(

Weiß hier vielleicht jemand wo der "Grundsatzfehler" liegt? Oder hat sonst jemand was an dem Script "zu meckern"? Bin für jeden Tipp sehr dankbar!

Grüße
Andreas

  1. Du hast die Variable diff lokal definiert (var diff) - so kennt natürlich die Funktion countdown die Variable nicht mehr...

    also einfach die Variable global definieren (das 'var' weglassen, also diff = ...)

    1. Hallo!

      Du hast die Variable diff lokal definiert (var diff) - so kennt natürlich die Funktion countdown die Variable nicht mehr...

      also einfach die Variable global definieren (das 'var' weglassen, also diff = ...)

      Das hatte ich schonmal probiert, aber es geht nicht. Sobald ich "+ diff" in die Berechnung einfüge geht es nicht mehr. Wenn ich "var" vor "diff" weglasse, dann bekomme ich anstatt "undefined" gar nichts ausgegeben. Und ich habe noch einen "Beweis" das es egal sein muß:
      "var eventdate" verwende ich ja auch innerhalb der Funkion, aber da scheint es auch nichts auszumachen.

      Ich versteh das _überhaupt_ nicht:

      var eventdate = new Date ("November 14, 2002 05:41:25");
      diff = 100000;

      function countdown() {
       cl = document.clock;
       d = new Date();
       var count = Math.floor((eventdate.getTime() - d.getTime() + diff) / 1000);

      Das funktioniert nicht, es wird _nichts_ ausgegeben.

      var eventdate = new Date ("November 14, 2002 05:41:25");

      function countdown() {
       cl = document.clock;
       d = new Date();
       var count = Math.floor((eventdate.getTime() - d.getTime() + 100000) / 1000);

      Dagegen funktioniert super. Es muß irgendwas mit den Namensräumen zu tun haben, wenn ich var vor diff setze, dann bekomme ich immer eine fehlerhafte Ausgabe, da diff dann immer undefined ist.

      Viele Grüße
      Andreas

      1. Bei der Definition von localtime muß es allerdings richtig heißen

        localtime = new.Date();   (das große D!)

        vielleicht liegts daran? ;-)

        1. Hallo!

          Bei der Definition von localtime muß es allerdings richtig heißen

          localtime = new.Date();   (das große D!)

          ARGHHHH!!! Das darf nicht wahr sein!

          vielleicht liegts daran? ;-)

          Vielen Dank, das lustige date() wird im Dreamweaver auch noch andersfarbig dargestellt als date(), war ich wohl etwas müde ;-)
          Hatte das mit den Namnesröumen nochmal durchgelesen, das Was Du geschrieben hattest trift nur auf Funktionen zu - "var" macht nur innerhalb einer Funktion die Variable lokal.

          Jedenfalls klappt es endlich, danke Dir!

          Grüße
          Andreas

          1. Hallo!

            Vielen Dank, das lustige date() wird im Dreamweaver auch noch andersfarbig dargestellt als date(), war ich wohl etwas müde ;-)

            Siehste, schon wieder falsch gemacht, müßte einmal date() und einmal Date() heißen...

            Grüße
            Andreas

  2. Natürlich gilt das auch für deine anderen Variablen, die Du außerhalb der jeweiligen Funktion lediglich lokal definiert hast. ;-)

    Also nochmal im Klartext:

    var ZEIT = ....  (hiermit wird die Variable lokal definiert und ist dadurch nicht in späteren Funktionsaufrufen verfügbar)

    ZEIT = .... (die Variable ist global und im gesamten Script mit allen Funktionen verfügbar)

  3. Hallo!

    Javascript hat irgndwas gegen mich, und ich hab auch was gegen Javascript. Ich probiere jetzt was weiß ich wie lange ein ganz blödes Countdown-Script hinzubekommen, aber es will einfach nicht. Das Script an sich ist kein Problem, nur möchte ich gerne die Zeitdifferenz zwischen Server und Client ausgleichen, das versuche ich wie folgt:

    var servertime = new Date ("<?php echo date ("F j, Y H:i:s");?>");
      // z.B.: var servertime = new Date ("November 14, 2002 02:59:10");
    var eventdate = new Date ("<?php echo date ("F j, Y H:i:s",time()+100);?>");
      // z.B.: var eventdate = new Date ("November 14, 2002 03:00:50");
    var localtime = new date();

    Falls das kein copy&paste Fehler ist, solltest du es hier mal mit dem Date (grosses D) Objekt versuchen.

    Struppi.