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?

¿Fue útil?

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top