Im Folgenden wird ein kleiner ActionScript-Code (AS2) für einen Flash-Countdown vorgestellt. Anhand der Systemzeit und eines Enddatums wird die verbleibende Zeit errechnet. Um die Anwendung ein wenig interaktiv zu machen, kann man mittels eines Kalenders das Enddatum verändern.

Enddatum des Countdowns bestimmen

Zuerst legt man ein Enddatum fest. Hierzu nutzt man ein Objekt der Klasse Date. Im Beispiel ist das Datum der 3. September 2008, da die Monate bei 0 (=Januar) beginnen.

Actionscript:
  1. // ::::: COUNTDOWN DATE :::::::::::::::::::::::::::::::::::
  2. var endDate:Date = new Date(2008, 8, 3, 0, 0, 0);

Countdown ständig aktualisieren

Anschließend sorgt man mit setInterval dafür, dass die Funktion updateCountdown alle 200 ms ausgeführt wird. Somit wird der Countdown ständig aktualisiert.

Actionscript:
  1. var interval:Number;
  2.     interval = setInterval(this, "updateCountdown", 200);

DataChooser

In der Funktion updateCountdown wird im Beispiel zuerst der Wert des Kalenders (=DataChooser) als neues Enddatum des Countdowns gesetzt. Dies ist natürlich nur zu Demonstrationszwecken. Hat man ein fixes Enddatum, erübrigt sich dieser Abschnitt.

Actionscript:
  1. // for DateChooser (delete this for use without DateChooser )
  2. if (myDateChooser.selectedDate != undefined) {
  3.     endDate = myDateChooser.selectedDate;
  4. }

Aktuelle Systemzeit auslesen

Nun speichert man die aktuelle Systemzeit ab:

Actionscript:
  1. // get system time
  2.     var now:Date = new Date();

Zeitdifferenz bilden

Jetzt gilt es, das aktuelle Datum vom Zieldatum abzuziehen, um die Zeitdifferenz zu erhalten. Dieser Wert mit der verbleibenden Zeit ist in Millisekunden!

Actionscript:
  1. // time between now and enddate
  2.     var deltaMilliS:Number = 0;  
  3.     deltaMilliS = endDate.getTime() - now.getTime();

Zeitzonen berücksichtigen

Nun sollte berücksichtigt werden, dass die beiden Daten in unterschiedlichen Zeitzonen liegen könnten (Winter- bzw. Sommerzeit in Deutschland). Diese kann man getrost herausrechnen, da sonst der Eindruck entsteht, der Countdown liegt eine Stunde daneben.

Actionscript:
  1. // Timezone offset?
  2.     var offsetMilliS:Number = 0;
  3.     offsetMilliS = (endDate.getTimezoneOffset() - now.getTimezoneOffset())* 60 * 1000;
  4.     deltaMilliS -= offsetMilliS;

Millisekunden umrechnen

Abschließend errechnet man aus dem Wert in Millisekunden die einzelnen Bestandteile: Tage, Stunden, Minuten, Sekunden.

Actionscript:
  1. // determine seconds, minutes, hours and dates
  2.     var diffSecs:Number = Math.floor (deltaMilliS / 1000);          // Seconds left
  3.     var diffMins:Number = Math.floor (deltaMilliS / ( 1000 * 60));            // Minutes left
  4.     var diffHours:Number = Math.floor (deltaMilliS / ( 1000 * 60 * 60));        // Hours left
  5.     var diffDays:Number = Math.floor (deltaMilliS / ( 1000 * 60 * 60 * 24));    // Days left      
  6.  
  7.     // mod
  8.     diffSecs = diffSecs % 60;
  9.     diffMins = diffMins % 60;
  10.     diffHours = diffHours % 24;

Beispiel anschauen:

Kompletter Beispielcode des Flash-Countdowns

Der komplette am Stück lautet folgendermaßen:

Actionscript:
  1. // ::::: COUNTDOWN DATE :::::::::::::::::::::::::::::::::::
  2.     var endDate:Date = new Date(2008, 8, 3, 0, 0, 0);
  3.  
  4.     // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  5.     var interval:Number;
  6.     interval = setInterval(this, "updateCountdown", 200);
  7.  
  8.     // init Countdown
  9.     updateCountdown();
  10.  
  11.     // ::::: UPDATE COUNTDOWN :::::::::::::::::::::::::::::::::::
  12.     function updateCountdown() {
  13.  
  14.  
  15.         // for DateChooser (delete this for use without DateChooser )
  16.         if (myDateChooser.selectedDate != undefined) {
  17.             endDate = myDateChooser.selectedDate;
  18.         }
  19.  
  20.         // get system time
  21.         var now:Date = new Date();
  22.  
  23.         // time between now and enddate
  24.         var deltaMilliS:Number = 0;  
  25.         deltaMilliS = endDate.getTime() - now.getTime();
  26.  
  27.         // Timezone offset?
  28.         var offsetMilliS:Number = 0;
  29.         offsetMilliS = (endDate.getTimezoneOffset() - now.getTimezoneOffset())* 60 * 1000;
  30.         deltaMilliS -= offsetMilliS;
  31.  
  32.         // determine seconds, minutes, hours and dates
  33.         var diffSecs:Number = Math.floor (deltaMilliS / 1000);          // Seconds left
  34.         var diffMins:Number = Math.floor (deltaMilliS / ( 1000 * 60));            // Minutes left
  35.         var diffHours:Number = Math.floor (deltaMilliS / ( 1000 * 60 * 60));        // Hours left
  36.         var diffDays:Number = Math.floor (deltaMilliS / ( 1000 * 60 * 60 * 24));    // Days left      
  37.  
  38.         // mod
  39.         diffSecs = diffSecs % 60;
  40.         diffMins = diffMins % 60;
  41.         diffHours = diffHours % 24;
  42.  
  43.         // update text 
  44.         myTxt.text = "Verbleibende Zeit: \n" + diffDays + " Tage \n" + diffHours + " Stunden \n"+ diffMins + " Minuten \n" + diffSecs + " Sekunden";   
  45.         myEndDateTxt.text = "Enddatum: \n" + endDate;
  46.     }