【问题标题】:calculate elapsed time in flash计算flash中经过的时间
【发布时间】:2008-09-18 16:49:14
【问题描述】:

我正在构建一个测验,我需要计算完成测验所需的总时间。 我需要显示 HH::MM::SS..任何指针所用的时间?

【问题讨论】:

    标签: time elapsed


    【解决方案1】:

    new Date().time 以毫秒为单位返回时间。

    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);
    

    【讨论】:

    • 在这个例子中你是否考虑了日期,如果有人在午夜前 1 分钟开始测验怎么办?
    • 没有区别,11pm 和 1am 之间的毫秒差应该和 11am 和 1pm 之间的毫秒差一样
    【解决方案2】:

    我重新提出这个问题是说布赖恩和云母都错了。创建一个新的 Date() 根据计算机的时钟为您提供时间。所有人所要做的就是将时钟拨回几分钟,这将导致测验计时器也拨回几分钟。或者更糟糕的是,他们可以将时钟调回开始测验之前的时间,而您的应用程序会认为他们在参加测验上花费的时间是负数。 o.O

    解决方案是使用 flash.utils.getTimer()。它返回自 swf 开始播放以来的毫秒数,无论计算机时钟显示什么。

    这是一个例子:

    var startTime:Number = getTimer();
    
    // then after some time passes:
    
    var elapsedMilliseconds:Number = getTimer() - startTime;
    

    那么你就可以使用Brian的代码来格式化显示时间了:

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

    【讨论】:

      【解决方案3】:

      小于 10 时填零(感谢 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】:
        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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-25
          • 2020-12-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-12
          • 2010-11-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多