2009-07-31 14 views
56

Sto cercando alcuni semplici campioni JavaScript per calcolare il tempo trascorso. Il mio scenario è, per uno specifico punto di esecuzione nel codice JavaScript, voglio registrare un'ora di inizio. E in un altro punto specifico di esecuzione nel codice JavaScript, voglio registrare un orario di fine.Tempo trascorso calcolo

Quindi, voglio calcolare il tempo trascorso sotto forma di: quanti giorni, ore, minuti e secondi sono trascorsi tra l'ora di fine e l'ora di inizio, ad esempio: 0 Days, 2 Hours, 3 Minutes and 10 Seconds are elapsed.

Qualsiasi campione semplice di riferimento? :-)

Grazie in anticipo,

George

risposta

12

Spero che questo vi aiuterà:

<!doctype html public "-//w3c//dtd html 3.2//en"> 
<html> 
    <head> 
     <title>compute elapsed time in JavaScript</title> 

     <script type="text/javascript"> 

      function display_c (start) { 
       window.start = parseFloat(start); 
       var end = 0 // change this to stop the counter at a higher value 
       var refresh = 1000; // Refresh rate in milli seconds 
       if(window.start >= end) { 
        mytime = setTimeout('display_ct()',refresh) 
       } else { 
        alert("Time Over "); 
       } 
      } 

      function display_ct() { 
       // Calculate the number of days left 
       var days = Math.floor(window.start/86400); 
       // After deducting the days calculate the number of hours left 
       var hours = Math.floor((window.start - (days * 86400))/3600) 
       // After days and hours , how many minutes are left 
       var minutes = Math.floor((window.start - (days * 86400) - (hours *3600))/60) 
       // Finally how many seconds left after removing days, hours and minutes. 
       var secs = Math.floor((window.start - (days * 86400) - (hours *3600) - (minutes*60))) 

       var x = window.start + "(" + days + " Days " + hours + " Hours " + minutes + " Minutes and " + secs + " Secondes " + ")"; 

       document.getElementById('ct').innerHTML = x; 
       window.start = window.start - 1; 

       tt = display_c(window.start); 
      } 

      function stop() { 
       clearTimeout(mytime); 
      } 

     </script> 

    </head> 

    <body> 

     <input type="button" value="Start Timer" onclick="display_c(86501);"/> | <input type="button" value="End Timer" onclick="stop();"/> 
     <span id='ct' style="background-color: #FFFF00"></span> 

    </body> 
</html> 
+0

Bella risposta. Come si avvia lo script all'avvio della pagina? – rd42

+0

86501 è il momento Grazie ancora Ramiz. – rd42

2

In primo luogo, si può sempre prendere il tempo corrente da

var currentTime = new Date(); 

Allora si potrebbe verificare questo esempio "pretty data" a http://www.zachleat.com/Lib/jquery/humane.js

Se questo non funziona, basta google "javascript pretty date" e troverai decine di script di esempio.

Buona fortuna.

2
<script type="text/javascript"> 
<!-- Gracefully hide from old browsers 

// Javascript to compute elapsed time between "Start" and "Finish" button clicks 
function timestamp_class(this_current_time, this_start_time, this_end_time, this_time_difference) { 
     this.this_current_time = this_current_time; 
     this.this_start_time = this_start_time; 
     this.this_end_time = this_end_time; 
     this.this_time_difference = this_time_difference; 
     this.GetCurrentTime = GetCurrentTime; 
     this.StartTiming = StartTiming; 
     this.EndTiming = EndTiming; 
    } 

    //Get current time from date timestamp 
    function GetCurrentTime() { 
    var my_current_timestamp; 
     my_current_timestamp = new Date();  //stamp current date & time 
     return my_current_timestamp.getTime(); 
     } 

    //Stamp current time as start time and reset display textbox 
    function StartTiming() { 
     this.this_start_time = GetCurrentTime(); //stamp current time 
     document.TimeDisplayForm.TimeDisplayBox.value = 0; //init textbox display to zero 
     } 

    //Stamp current time as stop time, compute elapsed time difference and display in textbox 
    function EndTiming() { 
     this.this_end_time = GetCurrentTime();  //stamp current time 
     this.this_time_difference = (this.this_end_time - this.this_start_time)/1000; //compute elapsed time 
     document.TimeDisplayForm.TimeDisplayBox.value = this.this_time_difference; //set elapsed time in display box 
     } 

var time_object = new timestamp_class(0, 0, 0, 0); //create new time object and initialize it 

//--> 
</script> 

    <form> 
     <input type="button" value="Start" onClick="time_object.StartTiming()"; name="StartButton"> 
    </form> 
    <form> 
     <input type="button" value="Finish" onClick="time_object.EndTiming()"; name="EndButton"> 
    </form> 
    <form name="TimeDisplayForm"> 
    Elapsed time: 
     <input type="text" name="TimeDisplayBox" size="6"> 
    seconds 
    </form> 
+3

language = "Javascript"? Veramente?;) – phairoh

+0

Grazie per questo commento. – adatapost

95

provare qualcosa di simile (FIDDLE)

// record start time 
var startTime = new Date(); 

... 

// later record end time 
var endTime = new Date(); 

// time difference in ms 
var timeDiff = endTime - startTime; 

// strip the ms 
timeDiff /= 1000; 

// get seconds (Original had 'round' which incorrectly counts 0:28, 0:29, 1:30 ... 1:59, 1:0) 
var seconds = Math.round(timeDiff % 60); 

// remove seconds from the date 
timeDiff = Math.floor(timeDiff/60); 

// get minutes 
var minutes = Math.round(timeDiff % 60); 

// remove minutes from the date 
timeDiff = Math.floor(timeDiff/60); 

// get hours 
var hours = Math.round(timeDiff % 24); 

// remove hours from the date 
timeDiff = Math.floor(timeDiff/24); 

// the rest of timeDiff is number of days 
var days = timeDiff ; 
+1

L'ultima riga deve essere "var days = timeDiff;" .. timeDays non esiste. – ForOhFor

+0

Non dovrebbe essere Math.floor()? –

+0

I.e. Sto facendo questo: function ms2Time (ms) { var secs = ms/1000; ms = Math.floor (ms% 1000); var minuti = secondi/60; secs = Math.floor (secs% 60); var ore = minuti/60; minuti = Math.floor (minuti% 60); ore = Math.floor (ore% 24); ore di ritorno + ":" + minuti + ":" + secondi + "." + ms; } –

10

Qualcosa di simile a un oggetto "cronometro" mi viene in mente:

Usage :

var st = new Stopwatch(); 
st.start(); //Start the stopwatch 
// As a test, I use the setTimeout function to delay st.stop(); 
setTimeout(function(){ 
      st.stop(); // Stop it 5 seconds later... 
      alert(st.getSeconds()); 
      }, 5000); 

Implementazione:

function Stopwatch(){ 
    var startTime, endTime, instance = this; 

    this.start = function(){ 
    startTime = new Date(); 
    }; 

    this.stop = function(){ 
    endTime = new Date(); 
    } 

    this.clear = function(){ 
    startTime = null; 
    endTime = null; 
    } 

    this.getSeconds = function(){ 
    if (!endTime){ 
    return 0; 
    } 
    return Math.round((endTime.getTime() - startTime.getTime())/1000); 
    } 

    this.getMinutes = function(){ 
    return instance.getSeconds()/60; 
    }  
    this.getHours = function(){ 
    return instance.getSeconds()/60/60; 
    }  
    this.getDays = function(){ 
    return instance.getHours()/24; 
    } 
} 
+0

Penso che questa cosa sia semplicemente fantastica! –

22

Prova questa ... programma Java

function Test() 
{ 
    var s1 = new StopWatch(); 

    s1.Start();   

    // Do something. 

    s1.Stop(); 

    alert(s1.ElapsedMilliseconds); 
} 

// Create a stopwatch "class." 
StopWatch = function() 
{ 
    this.StartMilliseconds = 0; 
    this.ElapsedMilliseconds = 0; 
} 

StopWatch.prototype.Start = function() 
{ 
    this.StartMilliseconds = new Date().getTime(); 
} 

StopWatch.prototype.Stop = function() 
{ 
    this.ElapsedMilliseconds = new Date().getTime() - this.StartMilliseconds; 
} 
0

scrittura che entrano tempo trascorso in secondi per qualsiasi manifestazione ciclistica & il formato di output dovrebbe essere come (ore: minuti: secondi) per EX: tempo trascorso in 4150 secondi = 1:09:10

5

Questo è quello che sto usando:

millisecondi per una stringa di formato tempo abbastanza:

function ms2Time(ms) { 
    var secs = ms/1000; 
    ms = Math.floor(ms % 1000); 
    var minutes = secs/60; 
    secs = Math.floor(secs % 60); 
    var hours = minutes/60; 
    minutes = Math.floor(minutes % 60); 
    hours = Math.floor(hours % 24); 
    return hours + ":" + minutes + ":" + secs + "." + ms; 
} 
6
var StopWatch = function (performance) { 
    this.startTime = 0; 
    this.stopTime = 0; 
    this.running = false; 
    this.performance = performance === false ? false : !!window.performance; 
}; 

StopWatch.prototype.currentTime = function() { 
    return this.performance ? window.performance.now() : new Date().getTime(); 
}; 

StopWatch.prototype.start = function() { 
    this.startTime = this.currentTime(); 
    this.running = true; 
}; 

StopWatch.prototype.stop = function() { 
    this.stopTime = this.currentTime(); 
    this.running = false; 
}; 

StopWatch.prototype.getElapsedMilliseconds = function() { 
    if (this.running) { 
     this.stopTime = this.currentTime(); 
    } 

    return this.stopTime - this.startTime; 
}; 

StopWatch.prototype.getElapsedSeconds = function() { 
    return this.getElapsedMilliseconds()/1000; 
}; 

StopWatch.prototype.printElapsed = function (name) { 
    var currentName = name || 'Elapsed:'; 

    console.log(currentName, '[' + this.getElapsedMilliseconds() + 'ms]', '[' + this.getElapsedSeconds() + 's]'); 
}; 

Benchmark

var stopwatch = new StopWatch(); 
stopwatch.start(); 

for (var index = 0; index < 100; index++) { 
    stopwatch.printElapsed('Instance[' + index + ']'); 
} 

stopwatch.stop(); 

stopwatch.printElapsed(); 

uscita

Instance[0] [0ms] [0s] 
Instance[1] [2.999999967869371ms] [0.002999999967869371s] 
Instance[2] [2.999999967869371ms] [0.002999999967869371s] 
/* ... */ 
Instance[99] [10.999999998603016ms] [0.010999999998603016s] 
Elapsed: [10.999999998603016ms] [0.010999999998603016s] 

performance.now() è facoltativo - basta passare falso in funzione di costruzione cronometro.

+0

Il collegamento 'performance.now()' è morto. – reformed

Problemi correlati