AS3: Date-Klasse zur Umwandlung in Minuten und Sekunden

Im ersten Beispiel möchte ich kurz zeigen, wie man mit der Date-Klasse in ActionScript 3 umgeht. Ein Date-Objekt kann ein Datum und eine Uhrzeit beinhalten. Im Anschluss folgt ein Beispiel, wie man auf einfache Weise die aktuelle Zeitposition eines Videos im Format Minuten/Sekunden (z.B. 1:30) realisieren kann (Beispiel anschauen).

Zeitanzeige im Format Minuten/Sekunden eines Flashvideos

Beispiel 1: Date-Objekte

Hier zunächst das Ergebnis-SWF bzw. die vier Date-Objekte, die danach erklärt werden:

[kml_flashembed movie=“http://www.video-flash.de/wp-content/uploads/2007/01/as3date/as3date.swf“ width=“520″ height=“200″ /]

Wird ein Objekt der Date-Klasse mit einem leeren Konstruktor erstellt, enthält er das (zur Laufzeit) aktuelle Datum und die aktuelle Uhrzeit (vgl. erste Zeile im SWF).

[as]var dt1:Date = new Date();[/as]

Des Weiteren kann man dem Konstruktor das Jahr, den Monat und dem Tag mitgeben. Dabei beginnen die Monate nicht mit Eins, sondern Null (=Januar). Die Tage sind ab Eins durchnummeriert (1-31).

[as]var dt2:Date = new Date(2007, 7, 3);[/as]

Als nächsten Schritt kann man auch eine Zeit ergänzen, in Stunden, Minuten, Sekunden. Im Beispiel ist dies genau 10:00 Uhr

[as]var dt3:Date = new Date(2007, 7, 3, 10, 0, 0);[/as]

Interessant wird es nun, wenn man Werte angibt, die außerhalb den in der Dokumentation angegebenen Bereichen liegen. Für second schreibt die Doku beispielsweise: second:Number (default = 0) — An integer from 0 to 59. Wählt man ein höhere Zahl, z.B. 100, wird diese automatisch richtig umgerechnet. Das Date-Objekt enthält also 1 Minute 40 Sekunden.

[as]var dt4:Date = new Date(2007, 0, 1, 0, 0, 100); // 100 Sekunden setzen
trace(„dt4.getMinutes: “ + dt4.getMinutes());[/as]

Über die Methoden wie getMinutes oder getSeconds lassen sich die einzelnen Bestandteile einer Zeitangabe auslesen.

Undokumentierte Funktionen in der Date-Klasse

Darron Schall weist in seinem Blog auf diese undokumentierten Funktionen hin. Auch negative Wert sind möglich. Beispiel new Date( 2006, 0, 1, -1 ) ist eine Stunde früher als der erste Januar, also der 31.12.05 um 23:00. Man kann also nach Belieben mit den Date-Objekten „rechnen“.

Beispiel 2: Zeitanzeige für eine .flv-Datei

Spielt man ein Video über NetConnection/NetStream ab, wird die aktuelle Zeit des Videos (ns.time) ausschließlich in Sekunden zurückgegeben. Ein Video, das 1:20 dauert, durchläuft also 1 bis 80.

Nimmt man also ns.time und packt den Wert in ein Date-Objekt, rechnet dieses die Sekunden automatisch in die Form Stunden/Minuten/Sekunden um. Nun kann man mit getMinutes() und getSeconds() die Zeit des Videos auslesen.

[as]vidTime = new Date(2007, 0, 1 , 0, 0, ns.time);
… = vidTime.getMinutes() + „:“ + vidTime.getSeconds();[/as]

Damit bei einer einstelligen Sekundenzahl 1:05 statt 1:5 angezeigt wird, baut man noch eine Fallunterscheidung ein.

[as]if (vidTime.getSeconds() < 10) { tf.text = vidTime.getMinutes() + ":0" + vidTime.getSeconds(); } else { tf.text = vidTime.getMinutes() + ":" + vidTime.getSeconds(); }; [/as] Quellcode zu Beispiel 2
Hier noch der komplette Quellcode zum Beispiel:

[as]
// ::: Video :::
var myVideo:Video = new Video(320,180);
addChild(myVideo);

var nc:NetConnection = new NetConnection();
nc.connect(null);

var ns:NetStream = new NetStream(nc);
ns.client = new Object();
myVideo.attachNetStream(ns);
ns.play(„gv.flv“);

// ::: Timer :::

import flash.utils.Timer;
import flash.events.TimerEvent;

var myTimer:Timer = new Timer(200);
myTimer.addEventListener(„timer“, updateDisplay);
myTimer.start();

// ::: Date :::

var vidTime:Date;

function updateDisplay(event:TimerEvent):void {
vidTime = new Date(2007, 0, 1 , 0, 0, ns.time);
if (vidTime.getSeconds() < 10) { tf.text = vidTime.getMinutes() + ":0" + vidTime.getSeconds(); } else { tf.text = vidTime.getMinutes() + ":" + vidTime.getSeconds(); }; tf2.text = tf.text; } // ::: Buttons ::: forwardButton.addEventListener(MouseEvent.MOUSE_UP, forward); rewindButton.addEventListener(MouseEvent.MOUSE_UP, rewind); resetButton.addEventListener(MouseEvent.MOUSE_UP, reset); function forward(event:MouseEvent) { ns.seek(ns.time+10); }; function rewind(event:MouseEvent) { ns.seek(ns.time-10); }; function reset(event:MouseEvent) { ns.seek(0); ns.resume(); }; [/as]

Link: Beispiel anschauen
Link: Darron Schall (Beitrag vom 28.12.06)
Link: Date-Klasse (ActionScript 3 Reference)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert