calcular el tiempo transcurrido en flash
Pregunta
Estoy creando un cuestionario y necesito calcular el tiempo total necesario para realizarlo.y necesito mostrar el tiempo necesario en HH::MM::SS... ¿algún consejo?
Solución
new Date().time devuelve la hora en milisegundos.
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);
Otros consejos
Resucito esta pregunta para decir que tanto Brian como mica están equivocados.La creación de una nueva Fecha() le proporciona la hora según el reloj de la computadora.Todo lo que alguien tiene que hacer es retrasar el reloj varios minutos, y eso haría que el cronómetro del cuestionario también retrocediera varios minutos.O peor aún, podrían retrasar su reloj a una hora anterior a comenzar el cuestionario y su aplicación pensaría que dedicaron una cantidad negativa de tiempo a realizar el cuestionario.o.o
La solución es utilizar flash.utils.getTimer().Devuelve el número de milisegundos desde que comenzó a reproducirse el SWF, independientemente de lo que indique el reloj de la computadora.
He aquí un ejemplo:
var startTime:Number = getTimer();
// then after some time passes:
var elapsedMilliseconds:Number = getTimer() - startTime;
Luego puede usar el código de Brian para formatear la hora de visualización:
var strTime:String = Math.floor(elapsedMilliseconds / (1000 * 60 * 60)) + "::" +
(Math.floor(elapsedMilliseconds / (1000 * 60)) % 60) + "::" +
(Math.floor(elapsedMilliseconds / (1000)) % 60);
Complete con cero cuando el número sea menor que 10 (Gracias 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();
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);
}