JS Counter mit Serverzeit

ThiKool

Erfahrenes Mitglied
Hallo Community,

ich habe mir folgenden Countdown gebastelt:

Javascript:
function countdown()
{
    var ctime = 1000;
    var tage = 'Tage';
    var countdown_d, countdown_h, countdown_m, countdown_s;
    var ausgabe_s, ausgabe_m, ausgabe_h;
    var endTime = [];
    var text = [];
    var i = 0;
   
   

    endTime[0] = new Date(e_time);
  
    timeNow = new Date();
   
    while((endTime[i] - timeNow) < 0)
    {
           i++;
    }
      var diffTime = endTime[i] - timeNow; //in Millisekunden
    diffTime = Math.floor(diffTime/1000);
   
    if(diffTime >= 0)
    {
        countdown_d = Math.floor(diffTime / 86400);
        diffTime = diffTime % 86400;
        countdown_h = Math.floor(diffTime / 3600);
        diffTime = diffTime % 3600;
        countdown_m = Math.floor(diffTime / 60);
        countdown_s = diffTime % 60;

        if(countdown_d == 1)
        {
            tage = 'Tag';
        }
        if(countdown_d < 1)
        {
            ausgabe_d = '';
        }
        else
        {
            ausgabe_d = countdown_d+' '+tage;
        }
        ausgabe_s = countdown_s+' Sek.'
        ausgabe_m = countdown_m+' Min. '
        ausgabe_h = countdown_h+' Std. '
        if(countdown_d <1 && countdown_h <1)
        {
            ausgabe_h =''
            if(countdown_m <1)
            {
                ausgabe_m=''
            }
        }
        document.getElementById('countdown').innerHTML = ausgabe_d+' '+ausgabe_h+' '+ausgabe_m+' '+ausgabe_s;
    }
    else
    {
        document.getElementById('countdown').style.display = 'none';

        ctime=9999999999999;
       
       window.location.href=go_to;

       
     }
     setTimeout("countdown()", ctime);
}

Das funktioniert auch alles soweit, aber leider nur mit der Clientzeit.

Jetzt habe ich timeNow so abgeändert:

timeNow = new Date(<?php echo (time()*1000);?>);

damit die Serverzeit berücksichtig wird.

Leider zeigt der Counter nun zwar die Restzeit immernoch korrekt an, aber er zählt nicht mehr runter.

Wisst ihr woran das liegen kann?


Viele Grüße


ThiKool
 
Hallo,

wird ein Fehler in der JavaScript-Konsole angezeigt?
Es wäre hilfreich, wenn du ein nachstellbares Beispiel auf http://jsfiddle.net erstellst.

Übrigens solltest du setTimeout und setInterval keine Strings übergeben. Übergib die Funktion selbst:
Javascript:
// "FALSCH" (im Sinne von sehr schlecht)
setTimeout("funktion()", 1000);
// RICHTIG
setTimeout(funktion, 1000);
 
Zuletzt bearbeitet:
Also die Konsole zeigt keine Fehler.

Wie funktioniert das mit jsfiddle.net?

Es scheint auch zu funktionieren, da ja sonst gar keine Zeit angezeigt werden würde, allerdings zählt er nur nicht mehr runter wenn ich die Serverzeit per time() hole
 
@ComFreek Mit deinem neu an den Tag gelegten Handling, meinen "Offtopic"-Hinweis vor/nach der Berichtigung zu löschen, werde ich zukünftig den Melden-Link nutzen :D

Vor einiger Zeit gab's zur Belohnung noch einen Danke-Klick :)

@ThiKool Vereinfacht, in den rechten Feldern HTML u. JavaScript die relevanten Code-Snippets einfügen, mit "Run" starten, und für's Link-Sharing auf "Save" klicken :)
 
Zuletzt bearbeitet:
Es funktioniert deshalb nicht, weil die PHP-Anweisung nur einmal beim Laden der Seite ausgeführt und der Wert in den Quelltext eingefügt wird. Wird die JS-Anweisung nochmal ausgeführt, wird die Zeit nicht neu berechnet, sondern wieder der beim Laden der Seite erzeugte Wert ausgewertet.
 
Du könntest dir die Serverzeit per PHP ausserhalb deiner Countdownfunktion holen und einmal die Differenz zur Local Time des Clients bilden. Dann kannst du innerhalb deiner Funktion mit Local Time + Differenz arbeiten.
 

Neue Beiträge

Zurück