2009-07-31 2 views
56

Я ищу несколько простых образцов JavaScript для вычисления прошедшего времени. Мой сценарий, для конкретной точки выполнения кода JavaScript, я хочу записать время начала. И в другой конкретной точке исполнения кода JavaScript я хочу записать время окончания.Вычислить прошедшее время

Затем я хочу рассчитать прошедшее время в виде: сколько дней, часов, минут и секунд прошло между временем окончания и временем начала, например: 0 Days, 2 Hours, 3 Minutes and 10 Seconds are elapsed.

Любые ссылки простых образцов? :-)

Спасибо заранее,

Джордж

ответ

12

Надежда это поможет:

<!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

Хороший ответ. Как заставить скрипт запускаться при загрузке страницы? – rd42

+0

86501 - это время. Спасибо снова, Рамиз. – rd42

2

Во-первых, вы всегда можете получить текущее время

var currentTime = new Date(); 

Тогда вы могли бы проверить этот пример «довольно дата» на http://www.zachleat.com/Lib/jquery/humane.js

Если это не работает для вас, просто введите «javascript nice date» в google и вы найдете десятки примеров сценариев.

Удачи.

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

язык = "Javascript"? В самом деле?;) – phairoh

+0

Спасибо за этот комментарий. – adatapost

95

Try что-то вроде этого (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

Последняя строка должна быть «var days = timeDiff;» .. timeDays не существует. – ForOhFor

+0

Должно ли это быть Math.floor()? –

+0

I.e. Я делаю это: 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; минут = Math.floor (минуты% 60); часов = Math.floor (часы% 24); Время возврата + ":" + минуты + ":" + secs + "." + ms; } –

10

Что-то, как объект "Секундомер" приходит на ум:

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

Реализация:

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

Я думаю, что это просто здорово! –

22

Попробуйте это ...

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

записи Java программы, которые входят истекшее время в секундах для любого велосипедного события & выходной формат должен быть как (час: мин: секунд) для EX: прошедшее время в 4150 секунд = 1:09:10

5

Это то, что я использую:

миллисекунды довольно строку времени в формате:

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

Выход

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() не является обязательным - просто передать ложь в функции Секундомер конструктора.

+0

Ссылка 'performance.now()' мертва. – reformed

Смежные вопросы