Countdown mit Javascript


CreativPur

Erfahrenes Mitglied
Guten Morgen,
ich habe ein Countdown in Javascript.

Mein Problem ist es, das Datum aus meiner MYSQL Datenbank, welches in der Zukunft liegt, in das Script zu integrieren.

Wert in der Datenbank:
z.B. 2025-04-15 00:00:00

Über PHP wird es folgend ausgelesen:
PHP:
<?php echo $kunde['laufzeit_ende'] ?>

In Javascript muss folgende Zeile gefüllt werden...
Javascript:
 var jahr=2025, monat=4, tag=15, stunde=00, minute=00, sekunde=00;
 var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);

Wie bekomme ich nun aus der Daten-Bank den Wert in die Zeile ?
 

CreativPur

Erfahrenes Mitglied
Hi,
der Typ ist timestamp
Javascript:
 var jahr=2022, monat=4, tag=15, stunde=23, minute=59, sekunde=22;
      var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);

      function countdown() {
        startDatum=new Date(); // Aktuelles Datum

        // Countdown berechnen und anzeigen, bis Ziel-Datum erreicht ist
        if(startDatum<zielDatum)  {

          var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

          // Jahre
          while(startDatum<zielDatum) {
            jahre++;
            startDatum.setFullYear(startDatum.getFullYear()+1);
          }
          startDatum.setFullYear(startDatum.getFullYear()-1);
          jahre--;

          // Monate
          while(startDatum<zielDatum) {
            monate++;
            startDatum.setMonth(startDatum.getMonth()+1);
          }
          startDatum.setMonth(startDatum.getMonth()-1);
          monate--;

          // Tage
          while(startDatum.getTime()+(24*60*60*1000)<zielDatum) {
            tage++;
            startDatum.setTime(startDatum.getTime()+(24*60*60*1000));
          }

          // Stunden
          stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
          startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

          // Minuten
          minuten=Math.floor((zielDatum-startDatum)/(60*1000));
          startDatum.setTime(startDatum.getTime()+minuten*60*1000);

          // Sekunden
          sekunden=Math.floor((zielDatum-startDatum)/1000);

          // Anzeige formatieren
          (jahre!=1)?jahre=jahre+" Jahre,  ":jahre=jahre+" Jahr,  ";
          (monate!=1)?monate=monate+" Monaten,  ":monate=monate+" Monat,  ";
          (tage!=1)?tage=tage+" Tagen,  ":tage=tage+" Tag,  ";
          (stunden!=1)?stunden=stunden+" Stunden,  ":stunden=stunden+" Stunde,  ";
          (minuten!=1)?minuten=minuten+" Minuten  und  ":minuten=minuten+" Minute  und  ";
          if(sekunden<10) sekunden="0"+sekunden;
          (sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";

          document.countdownform.countdowninput.value=
              jahre+monate+tage+stunden+minuten+sekunden;

          setTimeout('countdown()',200);
        }
        // Anderenfalls alles auf Null setzen
        else document.countdownform.countdowninput.value=
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
      }
 

ComFreek

Mod | @comfreek
Moderator
setTimeout('countdown()',200);
Das übergibt man schon seit > 15 Jahren nicht mehr als String, sondern direkt :)

Das, was man dir in Ein ARRAY speichern und abrufen geraten hat, trifft auch hier zu. Was hast du unternommen, um deine Aufgabe zu bewerkstelligen? Bisher hast du dazu nichts geschrieben.

Mit einer einzigen Google-Suche kam ich auf einen vielversprechenden StackOverflow-Thread. Fairerweise waren 3 Antworten davon falsch, aber mit ein bisschen Lesen unter den Kommentaren konnte man die beste Antwort herausfiltern.

der Typ ist timestamp
Gerade habe ich aus der MySQL-Doku erfahren, dass TIMESTAMP-Werte standardmäßig in der Serverzeitzone eingegeben und auch zurückgegeben werden :eek:
 

CreativPur

Erfahrenes Mitglied
Ich habe es so gelöst...
PHP:
$statement = $pdo->prepare("SELECT laufzeit_ende FROM users WHERE id = $userid");
$statement->execute(array()); 
while($row = $statement->fetch()) {
$date = new DateTime($row['laufzeit_ende']);
}

Javascript:
 var jahr=<?php echo $date->format('Y') ?>, monat=<?php echo $date->format('m') ?>, tag=<?php echo $date->format('d') ?>, stunde=<?php echo $date->format('H') ?>, minute=<?php echo $date->format('i') ?>, sekunde=<?php echo $date->format('s') ?>;
      var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);

vielen Dank
 

ComFreek

Mod | @comfreek
Moderator
Die Lösung ist leider insofern falsch, dass sie mit Zeitzonen nicht umgehen kann. Wenn auch nur eine der drei Komponenten {Browser, PHP, MySQL} eine andere Zeitzone eingestellt hat, wirst du Abweichungen von bis zu 24 Stunden sehen. Vielleicht sogar mehr? Datumsoperationen snid nicht trivial.
 

Neue Beiträge