Dietmar Gottke: Serverzeit auslesen mit Javascript

Moin moin,
Ich möchte mal freundlich um einen Tipp bitten, wie ich die Serverzeit mit Javascript bekomme.
Ich möchte nämlich nicht die Client-Zeit benutzen für eine zeitbegrenzte Anmeldungsseite.
Funktion:
Bis zu einem bestimmten Zeitpunkt gibt es eine Anmeldeseite, danach gibt es eine Seite mit Hinweis auf Meldeschluss.

Wenn die Serverzeit mit JS nicht geht, wie kann ich dann ersatzweise eine per PHP oder Perl ausgelesene Serverzeit an ein JS (in einer HTML-Seite) weitergeben und mit JS weiter verarbeiten.

Danke schon mal für's Mitdenken,

Dietmar

  1. Hallo,

    Moin moin,
    Ich möchte mal freundlich um einen Tipp bitten, wie ich die Serverzeit mit Javascript bekomme.

    AFAIK gar nicht, JS ist nämlich clientbasiert...

    Wenn die Serverzeit mit JS nicht geht, wie kann ich dann ersatzweise eine per PHP oder Perl ausgelesene Serverzeit an ein JS (in einer HTML-Seite) weitergeben und mit JS weiter verarbeiten.

    Mit einer Mischung aus PHP und JS, Beispiel:

    <script type="text/javascript">  
    serverzeit = 
    ~~~`<?php echo time() ?>`{:.language-php}  
    ~~~html
      
    </script>
    

    Grüße,
    Willi

    1. Hallo,

      Moin moin,
      Ich möchte mal freundlich um einen Tipp bitten, wie ich die Serverzeit mit Javascript bekomme.
      AFAIK gar nicht, JS ist nämlich clientbasiert...

      Wenn die Serverzeit mit JS nicht geht, wie kann ich dann ersatzweise eine per PHP oder Perl ausgelesene Serverzeit an ein JS (in einer HTML-Seite) weitergeben und mit JS weiter verarbeiten.

      Mit einer Mischung aus PHP und JS, Beispiel:

      <script type="text/javascript">

      serverzeit =

      
      > ~~~html
        
      
      > </script>
      
      

      Grüße,
      Willi

      Hallo,

      vielleicht noch time() mit date() in PHP nachbearbeiten und danach per PHP dem Javaskript var serverzeit = new Date(<?=jahr?>,<?=monat?> usw., tag, stunde, minute, sekunde); zuweisen.

      1. Hallo Tobi, hallo Rob das hört sich alles gut an:

        vielleicht noch time() mit date() in PHP nachbearbeiten und danach per PHP dem Javaskript var serverzeit = new Date(<?=jahr?>,<?=monat?> usw., tag, stunde, minute, sekunde); zuweisen.

        Wie wird time() mit date() in PHP nachgearbeitet und dem JS zugewiesen?
        Ich bin nicht so scriptfest. Wie muss ich das konkret schreiben, ich brauche die Serverzeit als JS Variable (in Englisch: Jan 17, 2007 23:59:59 );ich möchte aber nicht den Unix Timestamp auf meiner Seite ausgegeben haben, sondern die richtige Zeitangabe. Also <? php echo time() ?> geht dann wohl nicht

        Gruss Dietmar

        1. Hallo,

          ich brauche die Serverzeit als JS Variable (in Englisch: Jan 17, 2007 23:59:59 );ich möchte aber nicht den Unix Timestamp auf meiner Seite ausgegeben haben, sondern die richtige Zeitangabe. Also <? php echo time() ?> geht dann wohl nicht

          Ziehe mal das PHP-Tutorial zur Rate: http://php.net/date
          Schaue dir dort mal unter "Formatierungen" die Beispiele an, den Rest solltest du selber rausbekommen...

          Grüße,
          Willi

          1. Hallo,
            Schaue dir dort mal unter "Formatierungen" die Beispiele an, den Rest solltest du selber rausbekommen...

            Ja,  die Formatierungen habe ich auch hinbekommen, aber leider wird die mit PHP erzeugte Variable von JS nicht zur Weiterverarbeitung genommen.
            var Timestamp kleiner als var Deadline wird nicht verarbeitet.
            Konkret, Mein Script sieht jetzt so aus:
            <code>
            <script type="text/javascript">

            var Timestamp = "<?php echo strftime('%a %b %d, %Y %T') ?>";
            var Deadline = new Date("May 24, 2007 23:59:59");

            function validentry () {
            if (Timestamp < Deadline)
            location.href = "register.php";
            else
            location.href = "register-exp.php";
            }
            </code>

            Gruss Dietmar

            1. Hallo,

              Ja,  die Formatierungen habe ich auch hinbekommen, aber leider wird die mit PHP erzeugte Variable von JS nicht zur Weiterverarbeitung genommen.
              var Timestamp kleiner als var Deadline wird nicht verarbeitet.

              <script type="text/javascript">

              var Timestamp = "<?php echo strftime('%a %b %d, %Y %T') ?>";

              ^^ sollte da nicht auch ein new Date() hin?

              var Deadline = new Date("May 24, 2007 23:59:59");

              function validentry () {
              if (Timestamp < Deadline)
              location.href = "register.php";
              else
              location.href = "register-exp.php";
              }

              Grüße,  
              Willi
              
              -- 
              [ie:{ fl:| br:> va:) ls:< fo:| rl:( n4:( ss:| de:> js:| ch:? sh:( mo:} zu:}](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%7C+br%3A%3E+va%3A%29+ls%3A%3C+fo%3A%7C+rl%3A%28+n4%3A%28+ss%3A%7C+de%3A%3E+js%3A%7C+ch%3A%3F+sh%3A%28+mo%3A%7D+zu%3A%7D)
              
              1. Hallo Willi,

                Ja,  die Formatierungen habe ich auch hinbekommen, aber leider wird die mit PHP erzeugte Variable von JS nicht zur Weiterverarbeitung genommen.
                var Timestamp kleiner als var Deadline wird nicht verarbeitet.
                [code lang=javascript]
                <script type="text/javascript">

                var Timestamp = "<?php echo strftime('%a %b %d, %Y %T') ?>";
                                  ^^ sollte da nicht auch ein new Date() hin?

                Natürlich hatte ich das new Date() vergessen. Kann passieren ;-)

                Gruss, Dietmar

            2. Hallo,
              Schaue dir dort mal unter "Formatierungen" die Beispiele an, den Rest solltest du selber rausbekommen...

              Ja,  die Formatierungen habe ich auch hinbekommen, aber leider wird die mit PHP erzeugte Variable von JS nicht zur Weiterverarbeitung genommen.
              var Timestamp kleiner als var Deadline wird nicht verarbeitet.
              Konkret, Mein Script sieht jetzt so aus:
              <code>
              <script type="text/javascript">

              var Timestamp = "<?php echo strftime('%a %b %d, %Y %T') ?>";
              var Deadline = new Date("May 24, 2007 23:59:59");

              function validentry () {
              if (Timestamp < Deadline)
              location.href = "register.php";
              else
              location.href = "register-exp.php";
              }
              </code>

              Gruss Dietmar

              Warum soll überhaupt JS die Überprüfung vornehmen und weiterleiten!? Das kannst Du doch auch gleich mit PHP machen.

              1. Hallo,
                Warum soll überhaupt JS die Überprüfung vornehmen und weiterleiten!?
                Das kannst Du doch auch gleich mit PHP machen.

                Wenn ich's denn könnte :-( wäre das natürlich der bessere Weg, da hast du schon recht, aber ich hab keinen Plan wie ich das angehen sollte.
                Wenn es dir leichtfällt, dann schreib das doch mal bitte für PHP.
                ------------
                var Timestamp = new Date("<?php echo strftime('%a %b %d, %Y %H:%M:%S') ?>");
                var Deadline = new Date("May 25, 2007 23:59:59");

                function validentry () {
                if (Timestamp < Deadline)
                location.href = "register.php";
                else
                location.href = "register-exp.php";
                }
                -----------

                Gruss, Dietmar

                1. Hi!

                  Wenn ich's denn könnte :-( wäre das natürlich der bessere Weg, da hast du schon recht, aber ich hab keinen Plan wie ich das angehen sollte.

                  Die serverseitige Umleitung bekommst du hin, indem du mit der Funktion header() den HTTP-Header "location" sendest.

                  Wenn es dir leichtfällt, dann schreib das doch mal bitte für PHP.

                  In deinem Beispiel hattest du als "Deadline" den 25.5.07 23:59:59 angegeben.
                  Das ist, als Unix-Timestamp, 1180130399.
                  Diesen Wert habe ich verwendet.
                  Wenn du ihn abändert möchtest, dann weißt du ja jetzt, wie man mit Hilfe von PHP-Zeitfunktionen, ein Datum in einem Timestamp verwandeln könnte.
                  Alternativ dazu könntest du aber auch mal schnell ein Online-Tool wie diesen Timestamp Konverter benutzen.
                  Aber vielleicht stimmt deine Deadline ja auch so und du möchtest daran nichts mehr ändern..?

                  Also hier der Code:

                  <?php  
                  $deadline = 1180130399;  
                    
                  if ( time() < $deadline )  
                  {  
                   header( "Location: http://example.com/register.php" );  
                   exit;  
                  }  
                  else  
                  {  
                   header( "Location: http://example.com/register-exp.php" );  
                   exit;  
                  }  
                    
                  ?>
                  

                  Eigentlich ist es nicht mehr, als eine einfache if-Abfrage und dann das Senden eines HTTP-Headers.

                  Du mußt jetzt nur eines beachten:
                  Die Umleitung geschieht durch das Sendes eines HTTP-Headers.
                  Die Header müssen logischerweise vor dem eigentlichen Dokument gesendet werden.
                  Der Aufruf von header() funktioniert nur dann, wenn noch keine andere Ausgabe zum Client geschickt wurde.
                  Das bedeutet: Wenn du diesen Code einsetzt, dann solltest du ihn ganz oben in deiner Datei platzieren.
                  Da darf nicht einmal ein Leerzeichen davor stehen. Andernfalls würde der Server dieses Leerzeichen zum Browser schicken und damit wären dann bereits Header versandt worden.
                  Eine Weiterleitung wäre dann nicht mehr möglich.

                  Schöner Gruß,
                  rob

                  1. Hallo Rob,
                    ganz ganz herzlichen Dank, damit komme ich auf den Weg. Ich merke schon, ich muss demnächst mal etwas Zeit in PHP investieren, damit kann man wohl vieles relativ gut umsetzen.

                    Die serverseitige Umleitung bekommst du hin, indem du mit der Funktion header() den HTTP-Header "location" sendest.

                    Wenn es dir leichtfällt, dann schreib das doch mal bitte für PHP.
                    In deinem Beispiel hattest du als "Deadline" den 25.5.07 23:59:59 angegeben.
                    Das ist, als Unix-Timestamp, 1180130399.
                    Diesen Wert habe ich verwendet.
                    Wenn du ihn abändert möchtest, dann weißt du ja jetzt, wie man mit Hilfe von PHP-Zeitfunktionen, ein Datum in einem Timestamp verwandeln könnte.
                    Alternativ dazu könntest du aber auch mal schnell ein Online-Tool wie diesen Timestamp Konverter benutzen.
                    Aber vielleicht stimmt deine Deadline ja auch so und du möchtest daran nichts mehr ändern..?

                    Doch die Deadline ist jedes Jahr eine andere und muss per Hand vorgegeben werden, kann leider nicht automatisiert werden.

                    Also hier der Code:

                    <?php

                    $deadline = 1180130399;

                    if ( time() < $deadline )
                    {
                    header( "Location: http://example.com/register.php" );
                    exit;
                    }
                    else
                    {
                    header( "Location: http://example.com/register-exp.php" );
                    exit;
                    }

                    ?>

                    
                    >   
                    > Eigentlich ist es nicht mehr, als eine einfache if-Abfrage und dann das Senden eines HTTP-Headers.  
                      
                    Da bin ich schon beim Suchen in dem PHPÜ Manual gescheitert, als ich nach "URL, Link, Webseite aufrufen" und "weiterleiten" gesucht habe. Das ich nach "header" hätte suchen müssen liegt zwar nahe, wenn mans weiss aber erst mal drauf kommen. :-) jetzt weiss ichs :-)  
                      
                    
                    > Du mußt jetzt nur eines beachten:  
                    > Die Umleitung geschieht durch das Sendes eines HTTP-Headers.  
                    > Die Header müssen logischerweise vor dem eigentlichen Dokument gesendet werden.  
                    > Der Aufruf von header() funktioniert nur dann, wenn noch keine andere Ausgabe zum Client geschickt wurde.  
                      
                    Danke wertvoller Hinweiss!!  
                      
                    
                    > Das bedeutet: Wenn du diesen Code einsetzt, dann solltest du ihn ganz oben in deiner Datei platzieren.  
                    > Da darf nicht einmal ein Leerzeichen davor stehen. Andernfalls würde der Server dieses Leerzeichen zum Browser schicken und damit wären dann bereits Header versandt worden.  
                    > Eine Weiterleitung wäre dann nicht mehr möglich.  
                      
                    Schönen Gruss und nochmals Danke, das war sehr freundlich von dir.  
                      
                    Dietmar
                    
                2. Hallo,
                  Warum soll überhaupt JS die Überprüfung vornehmen und weiterleiten!?
                  Das kannst Du doch auch gleich mit PHP machen.

                  Wenn ich's denn könnte :-( wäre das natürlich der bessere Weg, da hast du schon recht, aber ich hab keinen Plan wie ich das angehen sollte.
                  Wenn es dir leichtfällt, dann schreib das doch mal bitte für PHP.

                  <?php

                  $schluss = mktime(0, 0, 0, 5, 24, 2007, 1);
                  echo "Stichtag: " . date("d.m.Y", mktime(0, 0, 0, 5, 24, 2007, 1)) . "<br>";
                  echo "heute: " . date("d.m.Y", time()) . "<br>";

                  if (time() >= $schluss)
                    { echo "beendet";
                      //header("Location: http://...");
                      //exit;
                    }
                  else
                    { echo "noch nicht beendet";
                      // header("Location: http://...");
                      //exit;
                    }

                  ?>

                  Das sollte mit den Bildschirmausgaben leicht nachzuvollziehen sein.

                  1. Hi!

                    Das sollte mit den Bildschirmausgaben leicht nachzuvollziehen sein.

                    Aber vorsichtig mit den Ausgaben...
                    Wie ich bereits hier geschrieben habe, kann die Weiterleitung mit header() nicht mehr funktionieren, wenn bereits eine Ausgabe mit echo erfolgt ist.

                    Schöner Gruß,
                    rob

                  2. Hallo Rob, ganz ganz herzlichen Dank. Damit hilfst du mir sehr. Ich bin zwar ganz gut mit HTML vertraut und Scripte sind nicht unbedingt etwas Fremdes, aber mir fehlt dann doch oft die Routine, weil ich dass nur unregelmässig mache.

                    <?php

                    $schluss = mktime(0, 0, 0, 5, 24, 2007, 1);
                    echo "Stichtag: " . date("d.m.Y", mktime(0, 0, 0, 5, 24, 2007, 1)) . "<br>";
                    echo "heute: " . date("d.m.Y", time()) . "<br>";

                    if (time() >= $schluss)
                      { echo "beendet";
                        //header("Location: http://...");
                        //exit;
                      }
                    else
                      { echo "noch nicht beendet";
                        // header("Location: http://...");
                        //exit;
                      }

                    ?>

                    Das sollte mit den Bildschirmausgaben leicht nachzuvollziehen sein.

                    Das ist es! Super.

                    Nochmals Danke für den Einsatz.

                    Viele Grüsse, Dietmar

            3. var Timestamp = "<?php echo strftime('%a %b %d, %Y %T') ?>";
              var Deadline = new Date("May 24, 2007 23:59:59");

              ...
              if (Timestamp < Deadline)

              Du vergleichst hier Äpfel mit Birnen. "Timestamp" ist ein String und "Deadline" ist ein Objekt. Lies mal das Kapitel zum Date-Objekt an. Und warum machst Du aus "Timestamp" mithilfe der Anführungszeichen einen String?

            4. So jetzt habe ich es laufen:

              Serverzeit wird ausgelesen und als die Registrierungszeit genommen.
              Wenn diese vor der Deadline liegt, wird das Anmeldedokument register.php aufgerufen, wenn nicht kommt eine "Frist abgelaufen" Seite.
              ------------
              <script type="text/javascript">

              var Timestamp = new Date("<?php echo strftime('%a %b %d, %Y %T') ?>");
              var Deadline = new Date("May 24, 2007 23:59:59");

              function validentry () {
              if (Timestamp < Deadline)
              location.href = "register.php";
              else
              location.href = "register-exp.php";
              }
              </script>
              --------------
              Gruss Dietmar und ein herzliches Danke an alle die mitgeholfen haben.

              1. Hi!

                So jetzt habe ich es laufen

                Schön, daß du das jetzt geschafft hast.

                if (Timestamp < Deadline)
                location.href = "register.php";
                else
                location.href = "register-exp.php";
                }

                Aber was passiert bei den Usern, die kein JavaScript nutzen bzw. gar nicht die Möglichkeit haben, JS zu nutzen?
                Hast du eine Fallback-Möglichkeit eingebaut?

                Du könntest natürlich einen noscript-Bereich schreiben, aber ich weiß nicht, ob du damit eine sinnvolle Alternative bieten kannst, da du ja hier auf eine andere Seite weiterleitest. (Manuelle Auswahl wäre hier dann wahrscheinlich nicht angebracht...)

                Du hast ja ganz offensichtlich die Möglichkeit, mit einer serverseitigen Technik, nämlich PHP zu arbeiten.
                Warum setzt du das nicht alles mit PHP um?
                Ist es in deinem Fall denn nicht möglich, die Zeit mit PHP auszuwerten und dann servereitig weiterzuleiten?

                Schöner Gruß,
                rob

            5. kannst ja mal hier 'n Beipiel ankucken. Die Uhr zeigt meine aktuelle Serverzeit.

        2. Hi!

          Wie wird time() mit date() in PHP nachgearbeitet und dem JS zugewiesen?

          Sag mal, schaust du dir eigentlich nicht die Links an, die man dir postet?

          Ich bin nicht so scriptfest.

          Das mußt du auch nicht sein.
          Im PHP Handbuch findest du jede PHP-Funktion beschrieben. Dort steht die genaue Syntax und da findest du auch Einsatzbeispiele.

          ich brauche die Serverzeit als JS Variable (in Englisch: Jan 17, 2007 23:59:59 );

          Ich weise jetzt zum dritten Mal auf die Funktion strftime() hin, womit es dir möglich ist, deine Zeitangabe deinen Wünschen entsprechend zu formatieren.
          Und wenn dir das nicht gefällt, gibt es auch noch andere Funktionen, die du dafür nutzen könntest, z.B. die Funktion date().

          Wie muss ich das konkret schreiben

          Das "Self" im Namen dieses Forums hat schon seine Bedeutung...
          Schau dir die geposteten Links an. Dort findest du alles, was du brauchst.
          Wenn du dann noch Fragen dazu haben solltest, dann stelle sie hier.
          Wenn irgendwas dann noch immer nicht funktionieren sollte, dann schreibe, was du bisher versucht hast und poste deinen Code.

          BTW: Es gibt im PHP-Handbuch ein ganzes Kapitel zu Datums- und Zeit-Funktionen.

          Schöner Gruß,
          rob

        3. Hallo Tobi, hallo Rob das hört sich alles gut an:

          vielleicht noch time() mit date() in PHP nachbearbeiten und danach per PHP dem Javaskript var serverzeit = new Date(<?=jahr?>,<?=monat?> usw., tag, stunde, minute, sekunde); zuweisen.

          Wie wird time() mit date() in PHP nachgearbeitet und dem JS zugewiesen?
          Ich bin nicht so scriptfest. Wie muss ich das konkret schreiben, ich brauche die Serverzeit als JS Variable (in Englisch: Jan 17, 2007 23:59:59 );

          Soll die Serverzeit nur einmal (statisch) ausgegeben oder weiterverarbeitet werden? Soll die Zeit weiterlaufen und fortlaufend von JS ausgegeben/ fortgeschrieben werden?

    2. Hallo Willi, herzlichen Dank

      genau das ist es was ich suchte:

      Mit einer Mischung aus PHP und JS, Beispiel:

      <script type="text/javascript">

      serverzeit =

      
      > ~~~html
        
      
      > </script>
      
      

      Jetzt gibt time() aber nur "1179945293" aus, das muss noch in eine von Menschen lesbare Zeit umgewandelt werden. Weisst du auch wie das geht, wenn ich weiterhin mit der Variable "Serverzeit arbeiten will?

      Gruss, Dietmar

      1. Hi!

        Jetzt gibt time() aber nur "1179945293" aus

        Ja. Das ist ein Unix-Timestamp. Die Anzahl der Sekunden seit dem 1.1.1970.
        Damit läßt sich aber gut arbeiten.
        Auch Javascript bietet einiges an Zeitfunktion, um damit weiterzuarbeiten.

        das muss noch in eine von Menschen lesbare Zeit umgewandelt werden.

        Schau dir die Zeitfunktionen von JavaScript an.
        Oder nutze strftime(), um deine Zeitangabe mit PHP in ein von dir gewünschtes Format zu bringen.

        Schöner Gruß,
        rob

    3. Hi!

      Mit einer Mischung aus PHP und JS, Beispiel:

      <script type="text/javascript">

      serverzeit =

      
      > ~~~html
        
      
      > </script>
      
      

      Ja, allerdings gibt die Funktion time() einen Unix-Timestamp zurück.
      Diesen kann man natürlich auch wunderbar mit JavaScript weiterverarbeiten, aber falls ein anderes Format gewünscht wird, sollte man vielleicht einen Blick auf strftime() werfen oder sich die weiteren Datums- und Zeitfunktionen ansehen.

      Schöner Gruß,
      rob

    4. Hallo Willi,

      <script type="text/javascript">

      serverzeit =

      
      > ~~~html
        
      
      > </script>
      
      

      Das allein reicht nicht aber fast, vgl. diesen Archivbeitrag

      Mit freundlichem Gruß
      Micha