2008-09-18 33 views
3

Je construis un quiz et j'ai besoin de calculer le temps total nécessaire pour faire le quiz. et j'ai besoin d'afficher le temps pris dans les pointeurs HH :: MM :: SS..any?calculer le temps écoulé en flash

Répondre

4

new Date(): l'heure renvoie l'heure en millisecondes.

var nStart:Number = new Date().time; 

// Some time passes 

var nMillisElapsed:Number = new Date().time - nStart; 

var strTime:String = Math.floor(nMillisElapsed/(1000 * 60 * 60)) + "::" + 
    (Math.floor(nMillisElapsed/(1000 * 60)) % 60) + "::" + 
    (Math.floor(nMillisElapsed/(1000)) % 60); 
+0

prenez-vous la date de votre compte dans cet exemple, si quelqu'un commence le quiz 1 minute avant minuit? – Omu

+0

cela ne fait aucune différence, la différence en millisecondes entre 23h et 1h doit être la même qu'entre 11h et 13h –

1

Remplir avec zéro lorsque le nombre est inférieur à 10 (Merci brian)

var now:Date; // 
var startDate:Date; 
var startTime:Number; 
// initialize timer and start it 
function initTimer():void{ 
    startDate = new Date(); 
    startTime = startDate.getTime(); 
    // 
    var timer:Timer = new Timer(1000,0); // set a new break 
     timer.addEventListener(TimerEvent.TIMER, onTimer); // add timer listener 
    // 
    function onTimer():void{ 
     now=new Date(); 
     var nowTime:Number = now.getTime(); 
     var diff:Number = nowTime-startTime; 
     var strTime:String = Math.floor(diff/(1000 * 60 * 60)) + ":" + 
          zeroFill(Math.floor(diff/(1000 * 60)) % 60) + ":" + 
          zeroFill(Math.floor(diff/(1000)) % 60); 
     // display where you want 
     trace('time elapsed : ' + strTime); 
    } 
    // fill with zero when number is less than 10 
    function zeroFill(myNumber:Number):String{ 
     var zeroFilledNumber:String=myNumber.toString(); 
     if(myNumber<10){ 
      zeroFilledNumber = '0'+zeroFilledNumber; 
     } 
     return zeroFilledNumber; 
    } 

    // start TIMER 
    timer.start(); 

} 
initTimer(); 
4

Je ressuscite cette question de dire que Brian et le mica sont fausses. Créer une nouvelle date() vous donne l'heure en fonction de l'horloge de l'ordinateur. Tout ce que quelqu'un a à faire est de régler son horloge plusieurs minutes, ce qui retarderait aussi le chronomètre de plusieurs minutes. Ou pire, ils pourraient remettre leur horloge à une heure avant de commencer le quiz, et votre application penserait qu'ils ont passé un temps négatif à prendre le quiz. o.O

La solution consiste à utiliser flash.utils.getTimer(). Il renvoie le nombre de millisecondes écoulées depuis le début de la lecture du fichier SWF, indépendamment de l'horloge de l'ordinateur.

Voici un exemple:

var startTime:Number = getTimer(); 

// then after some time passes: 

var elapsedMilliseconds:Number = getTimer() - startTime; 

Ensuite, vous pouvez utiliser le code de Brian pour formater le temps pour l'affichage:

var strTime:String = Math.floor(elapsedMilliseconds/(1000 * 60 * 60)) + "::" + 
(Math.floor(elapsedMilliseconds/(1000 * 60)) % 60) + "::" + 
(Math.floor(elapsedMilliseconds/(1000)) % 60); 
0
var countdown:Timer = new Timer(1000); 
countdown.addEventListener(TimerEvent.TIMER, timerHandler); 
countdown.start(); 

function timerHandler(e:TimerEvent):void 
{   
    var minute = Math.floor(countdown.currentCount/60); 
    if(minute < 10) 
     minute = '0'+minute; 

    var second = countdown.currentCount % 60; 
    if(second < 10) 
     second = '0'+second; 


    var timeElapsed = minute +':'+second; 
    trace(timeElapsed); 
}