Ron: php-uhr mit javascript aufenthaltsdauer verbinden..

hallo miteinander,

bin immernoch damit beschäftigt die "richtige" uhrzeit auf meine website zu bringen.
beherzige auch den rat den ich vor ein paar tagen hier im forum bekommen habe und versuche die php-uhrzeit mit der aufenthaltsdauer zu verbinden und diese zeit dann auf der webseite anzeigen zu lassen.

dazu hab ich das beispiel von selfhtml für aufenthaltsdauer genommen (folgender link)

http://selfhtml.teamone.de/javascript/beispiele/aufenthaltsdauer.htm#hinweise

in diesem script wird die uhr jedoch in einem formularfeld ausgegeben.
drum hab ich document.write an dieser stelle eingesetzt.

für die variable 'Jetzt' hab ich anstelle von 'new Date();' die php-uhrzeitabfrage eingegeben. <? echo date("H:i");?>

und das ganze auch als php-datei auf den server getan.
funktioniert aber überhaupt nicht.

selbst das document.write scheint nicht zu funktionieren, wenn ich wieder 'new Date();' anstelle der php-anweisung einsetze.

hier der vollständige code:

<html>
<head>
<title>Aufenthaltsdauer auf Web-Seite anzeigen</title>
<script type="text/javascript">
<!--

var Jetzt = <? echo date("H:i");?>;
var Start = Jetzt.getTime();

function ZeitAnzeigen() {
var absSekunden = Math.round(ZeitBerechnen());
var relSekunden = absSekunden % 60;
var absMinuten = Math.abs(Math.round((absSekunden-30)/60));

var anzSekunden ="" + ((relSekunden > 9) ? relSekunden : "0" + relSekunden);
var anzMinuten ="" + ((absMinuten > 9) ? absMinuten : "0" + absMinuten);
document.write(anzMinuten + ":" + anzSekunden);
window.setTimeout('ZeitAnzeigen()',1000);
}

function ZeitBerechnen() {
var Immernoch = new Date();
return((Immernoch.getTime() - Start)/1000);
}
// -->
</script>
</head>
<body bgcolor="#EEEEEE" text="#000000" onLoad="window.setTimeout('ZeitAnzeigen()',1000)">
</body>
</html>

vielleicht kann mir ja jemand sagen woran es liegt, oder wo mein denkfehler liegt

gruß ...ron

  1. hallo miteinander,

    Hallo ron,

    meines Wissens nach liegt das Problem in dieser Zeile:

    document.write(anzMinuten + ":" + anzSekunden);

    Die write-Funktion schreibt natürlich Text in Deine Seite, jedoch funktioniert das so nicht. Mit der Funktion kann man folgendes machen:

    document.open();
    document.write('<html><head></head><body>');
    document.write('Das Ergebnis: ' + String(a+b));
    document.write();
    document.write('</body></html>');
    document.close();

    Dann hast Du eine neue HTML-Seite - und zwar eine komplett neue. Oder Du nutzt es als Einbettung:

    siehe dazu das Beispiel von http://selfhtml.teamone.de/javascript/objekte/document.htm#write

    Würde Deine Idee funktionieren, dann würde aber das Ergebnis z.B. nach 5 Sekunden so aussehen:

    20:0520:0620:0720:0820:09

    selbst mit einem "document.writeln" sähe es dann so aus:
    20:05
    20:06
    20:07
    20:08
    20:09

    Für Deinen Anwendungsfall gibt es theoretisch zwei Möglichkeiten:

    1. Möglichkeit (2 Dateien):

    Datei "uhr.js":
      ---------------
        var Start = Jetzt.getTime();

    function ZeitAnzeigen() {
          var absSekunden = Math.round(ZeitBerechnen());
          var relSekunden = absSekunden % 60;
          var absMinuten = Math.abs(Math.round((absSekunden-30)/60));

    var anzSekunden ="" + ((relSekunden > 9) ? relSekunden : "0" + relSekunden);
          var anzMinuten ="" + ((absMinuten > 9) ? absMinuten : "0" + absMinuten);
          document.open();
          document.write('<html><head><script type="text/javascript"> var Jetzt=' + Jetzt + '</script>');
          document.write('<script type="text/javascript" src="uhr.js"> </script> </head><body>');
          document.write(anzMinuten + ":" + anzSekunden);
          document.close();
          window.setTimeout('ZeitAnzeigen()',1000);
        }

    function ZeitBerechnen() {
          var Immernoch = new Date();
          return((Immernoch.getTime() - Start)/1000);
        }

    HTML-Datei:
      -----------

    <html>
          <head>
            <title>Aufenthaltsdauer auf Web-Seite anzeigen</title>
            <script type="text/javascript">
              <!--
              var Jetzt = <? echo date("H:i");?>;
              // -->
            </script>
            <script type="text/javascript" src="uhr.js"></script>
          </head>
          <body bgcolor="#EEEEEE" text="#000000" onLoad="window.setTimeout('ZeitAnzeigen()',1000)">
          </body>
        </html>

    Problem: Kann auf langsamen oder anderweitig beschäftigten PC's ein bißchen doof aussehen, vor allem, wenn diese HTML-Seite mal später größer wird oder Bilder bekommt.

    2. Möglichkeit (objektorientiert):

    Du bleibst bei der ursprünglichen Idee aus dem Beispiel:
    Dieses 'Objekt' "window.document.Anzeige.Zeit.value" kann man eben bei vielen (auch alten) Browsern ansprechen, weil Formulare und das Abfragen oder Vorbelegen der Formularelemente schon seit Ewigkeiten zum Standardrepartoire der Browser gehören.
    Vorausgesetzt, die Leute surfen mit MSIE 5.5 oder NN 6.0 oder höher, kannst Du auf das DOM zurückgreifen (siehe Javascipt-Beschreibung in SELFHTML). Da geht dann sowas:

    im javascript-teil:
    document.getElementById('uhrzeit').nodeValue = 'aktuelle Zeit:' + min + ':' + sec

    im HTML-Teil:
    <div id="uhrzeit"></div>

    Willst Du aber auch ältere Browser unterstützen, dann wird's schwierig. Dann mußt Du nämlich prüfen, welchen Browser der Surfer nutzt und dann anstelle vom DIV-Objekt ein LAYER-Objekt benutzen (NN 4.7x) oder über das 'document.all'-Objekt aus dem MSIE 4.x zum eigentlichen Objekt kommen.

    In jedem Fall mußt Du aber den neuen Wert quasi an ein Objekt übergeben. Mit document.write kann man solche dynamischen Sachen nicht umsetzen. Denn die erste Möglichkeit ist ja nicht wirklich dynamisch.

    Wenn das mit dem Editfeld nicht mehr als ein kleiner Schönheitsfehler ist, dann lohnt sich der Aufwand aus meiner Sicht nicht.

    Gruß,
    Andreas

    PS: etwas Abwechslung gesucht? http://schigold.de/spiel/

    1. hallo Andreas,

      Vielen Dank für deine ausführliche antwort,
      war kurz ausser haus etwas essen, deshalb jetzt erst mein dank an dich. ausserdem ist grad meine leitung oder was auch immer völlig abgekackt. jetzt funktioniert es aber wieder.
      muß die antwort natürlich erstmal in mir setzen lassen.
      und auch verstehen lernen. werde mich aber gleich hinsetzen und mit ihr rumprobieren.
      wirkt sich der nachteil für die erste datei auch aus wenn die die datei in nem frame? und sonst weiter nichts drin? mal spontan gefragt.

      ist halt alles oft nicht so einfach wie man sich das schnell zusammenüberlegt.
      bin aber echt begeistert von deiner auseinandersetzung mit meiner frage.
      das spiel hab ich grad mal kurz ausprobiert, bin sowieso ein alter snake-fan. noch vom C16 her. und auf dem alten nokia bis zum erbrechen gespielt. hatte nen freund der mal das gaze display, bis auf den letzten punkt voll gekriegt hatte. 2008 punkte.
      selber gemacht?
      werd mal noch nen gescheiten hiscore hinlegen.

      gruß ron.

      1. Hallo Ron

        wirkt sich der nachteil für die erste datei auch aus wenn die die datei in nem frame? und sonst weiter nichts drin? mal spontan gefragt.

        nein. Wenn Deine Uhr in einem seperaten Frame ist, dann wird nur der Inhalt dieses Frames aktualisiert. Wenn auf dem PC der Surfers nichts spannendes los ist, dann wird er wohl auch kaum etwas bemerken. Es wird halt nur dann interessant, wenn er nebenbei den MP3-Player laufen hat und gleichzeitig auch noch (die sinnlose) findfast.exe aus dem MS-Office-Paket über die Festplatte rasselt. Dann kann es mal im Einzelfall dazu kommen, daß es etwas holprig wirkt, wenn das eine Frame immer wieder neu dargestellt wird. Sollte aber bei nur der Zeit kaum passieren.

        ist halt alles oft nicht so einfach wie man sich das schnell zusammenüberlegt.

        das kenne ich

        bin aber echt begeistert von deiner auseinandersetzung mit meiner frage.
        das spiel hab ich grad mal kurz ausprobiert, bin sowieso ein alter snake-fan. noch vom C16 her. und auf dem alten nokia bis zum erbrechen gespielt. hatte nen freund der mal das gaze display, bis auf den letzten punkt voll gekriegt hatte. 2008 punkte.

        die Nokia-umsetzung kenne ich zwar nicht, aber so großzügig wird hier nicht mit Punkten umgegangen ;-)

        selber gemacht?

        Jo

        werd mal noch nen gescheiten hiscore hinlegen.

        hoffentlich ist dann mein PC eingeschaltet. Leider konnte ich mich noch nicht zur Anschaffung eines entsprechenden Webspaces durchringen und daher nutze ich mal nebenbei meinen Linux-PC als Web-Server. Naja, T-DSL-flat macht es erschwinglich - aber die Stromrechnung! egal.

        Gruß,
        Andreas