myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [JavaScript] Countdown fehler (https://mygully.com/showthread.php?t=2198808)

bludi94 04.01.11 22:03

[JavaScript] Countdown fehler
 
Hi also ich häng fest hab angefangen mit javas***** hänge aber gerade fest:

also mein ziel:
Ein Sekunden wert von der DB via PHP auslesen (Erfolg)
Variable an Javas***** übergeben (Erfolg)
Sekunden in Tage Stunden Minuten Sekunden Formatieren (Misserfolg)
Zeit ablaufen lassen (Erfolg)

Kurz gesagt ich hab die sekunden die noch vergehen müssen bis zum ereigniss X diese soll in echtzeit durch Javas***** ablaufen.

Problem beim ablauf werden verschiedene zeiten aber nicht die richtigen angezeigt heißt formationsfehler die grundwerte stimmen.

PHP Code:
PHP-Code:

// $zeit ist eine diverenz aus time() und festgelegter zeit also ein             // sekundenwert
function zeitausgabe($zeit)
{
        echo 
'<span id="ausgabe"></span>';
        echo 
'<s***** type="text/javas*****"> countDown(' $zeit '); </s*****>';


Javas***** Code:
Code:

function countDown(zeit) {
    timeout = zeit;
    sec = zeit % 60;
    zeit /= 60;
    minute = zeit % 60;
    zeit /= 60;
    std = zeit % 24;
    zeit /= 24;
    sec = parseInt(sec - 0.5);
    minute = parseInt(minute - 0.5);
    std = parseInt(std - 0.5);
    zeit = parseInt(zeit - 0.5);
   
    if(zeit > 0)
    {
      zeitstring = zeit + ":";   
    }
    else
    {
      zeitstring = "";   
    }
   
    zeitstring += std + ":";
   
    if(minute > 9)
    {
      zeitstring += minute + ":";   
    }
    else
    {
      zeitstring += "0" + minute + ":";
    }
   
    if(sec > 9)
    {
      zeitstring += sec;
    }
    else
    {
      zeitstring += "0" + sec;   
    }
    document.getElementById("ausgabe").innerHTML = zeitstring.toString();
    timeout --;
    if (timeout < 0) {
        document.getElementById("ausgabe").innerHTML = "<a onclick=window.location.href='index.php?'>Bau abgeschlossen</a>";
    } else {
        setTimeout("countDown(timeout)", 1000);
    }
}

die codes werden in HTML zusammengeführt dies läuft einwandfrei.

Bitte um hilfe schonmal danke.

kogs 05.01.11 08:52

Morgen,

ich hab mir deine Formeln jetzt nicht genau durch den kopf gehen lassen, aber ich würd die Umrechnung von
Sekunden auf Stunden:Minuten:Sekunden
folgendermaßen angehen.

Code:

std = Math.floor(timeout / 3600);
min = Math.floor((timeout - (std * 3600)) / 60);
sek = timeout - (std * 3600) - (min * 60);

ist kürzer und glaube auch einfacher zu lesen

übrigens, Math.floor rundet immer ab, ich denke das ist das was du mit

Code:

parseInt(xxx - 0.5);
auch erreichen wolltest.


Gruss

bludi94 05.01.11 14:04

kogs danke für deinen schnellen Tipp hat geklappt also fals jemand das sebe vorhaben/problem hat hier der fehlerfreie code

Code:

// JavaS***** Document
var timeout; // Variable für funktion countDown
function countDown(zeit)
{
    timeout = zeit; // Ist Global angelegt worden

        // Umwanflund der Sekunden in Tage Stunden Minuten Sekunden
    var sec = zeit;
        var tag = Math.floor(sec / (60*60*24) );
        sec -= tag*(60*60*24);
    var std = Math.floor( sec / (60*60) );
    sec -= std*(60*60);
    var minute = Math.floor( sec / 60 );
    sec -= minute*60;

        // Formatierte ausgabe der Zeit
    var zeitstring = "";
        if (tag>0)
        {
                if (tag == 1)
                {
                  zeitstring += tag + " Tag ";       
                }
                else
                {
                  zeitstring += tag + " Tage ";       
                }
        }
       
    if (std>0)
    {
        if (std<10) zeitstring += '0';
        zeitstring += std.toString() + ':';
    }
    if (std>0 || minute>0)
    {
        if (minute<10) zeitstring += '0';
        zeitstring += minute.toString() + ':'
    }
    if (sec<10) zeitstring += '0';
    zeitstring += sec.toString();

    if (std > 0) zeitstring += " Std";
    else if (minute > 0) zeitstring += " Min";
    else zeitstring += " Sek";

        // Eintragen der zeit in HTML
    document.getElementById("ausgabe").innerHTML = zeitstring;
        // veringerung der Zeit um 1 Sekunde
    timeout --;
       
    if (timeout < 0)
    {
                // Bei ablauf der Zeit wird ein Link ausgegeben
        document.getElementById("ausgabe").innerHTML = "<a href='index.php'>Bau abgeschlossen<\/a>";
    }
    else
    {
                // Wenn die zeit noch nicht rum ist Selbstaufruf nach 1 Sekunde
        setTimeout("countDown(timeout)", 1000);
    }
}


tha_specializt 05.01.11 21:43

Code:

       
    if (timeout < 0)
    {

das müsste
Code:

if (timeout <= 0)
lauten. Zumal ich das manuelle Herunterzählen für unsinnig halte, nutze doch einfach [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...], das ist bedeutend präziser


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.