Я делаю секундомер JS в формате H:m:s:ms, когда он достигает 60 минут, он всегда увеличивается до 61,62 и так далее.
я использую setInterval вот мой код:
n = 3600;
td = setInterval(function ()
{
n++;
let hours = parseInt(n / 3600);
var m = parseInt(n / 60)
var s = parseInt(n / 60 % 60);
var M = parseInt(n % 60);
// let hours = Math.floor(((n[ids] / 1000) / 60) / 60) % 24
// let m = Math.floor((n[ids] / 1000) / 60) % 60
// let s = Math.floor(n[ids] / 1000) % 60
// let M = Math.floor(n[ids] % 1000)
$("#display0").html(toDub(hours) + ":" + toDub(m) + ":" + toDub(s) + ":" + toDub(M))
}, 1000 / 60);
полный исходный код: https://jsfiddle.net/greycat/danvL42s/2/
Я уверен, что с моей переменной m что-то не так.
Кто-нибудь может мне помочь?
n =0;
td = setInterval(function() {
n++;
let hours = parseInt(n / 3600000);
var m = parseInt(n %3600000 / 60000)
var s = parseInt(n %3600000 %60000/ 1000);
var M = parseInt(n %3600000 %60000% 1000);
$("#display0").html(toDub(hours) + ":" + toDub(m) + ":" + toDub(s) + ":" + toDub(M));
if (m==60) {
n=0;
}
}, 1);
Когда n = 0 миллисекунд. В первой итерации значение n будет равно 1 после увеличения. Чтобы получить часы, я разделил n на 3600000, потому что 1 час = 3600000 миллисекунд. Чтобы получить минуты, я вычислил оставшиеся миллисекунды после вычисления часа, а затем разделил оставшиеся миллисекунды на 60000, потому что 1 минута = 60000 миллисекунд. Теперь, чтобы получить секунды, я вычислил оставшиеся миллисекунды после нахождения минут и разделил на 1000, потому что 1 секунда = 1000, а в конце оставшееся значение n wiil миллисекунд.
Из логики следует, что секунда — это округленное значение своей доли в 60 миллисекунд, а минута — это округленное значение своей доли в 60 секунд, и так далее, и тому подобное.
Вы можете реорганизовать временные переменные, как показано ниже:
var M = parseInt(n % 60);
var s = parseInt(n / 60 % 60);
var m = parseInt(n / 60**2 % 60);
var hours = parseInt(n / 60**3 % 60);
Я хочу проверить, достигает ли секундомер 1 часа, какое значение должно быть присвоено переменной n?
60 в степени 3
function toDub(n){
return n < 10 ? "0" + n : "" + n
}
$(document).on('click', '.start01', function(event) {
$(this).attr("style", "display:none");
var ids = parseInt($(this).attr('id').substring(5));
$("#stop" + ids).attr("style", "display:block")
// console.info(n[ids])
n = 0;
td = setInterval(function ()
{
n++;
let hours = parseInt(n / 216000);
var m = parseInt(n / 3600)
var s = parseInt(n / 60 % 60);
var M = parseInt(n % 60);
// let hours = Math.floor(((n[ids] / 1000) / 60) / 60) % 24
// let m = Math.floor((n[ids] / 1000) / 60) % 60
// let s = Math.floor(n[ids] / 1000) % 60
// let M = Math.floor(n[ids] % 1000)
$("#display0").html(toDub(hours) + ":" + toDub(m) + ":" + toDub(s) + ":" + toDub(M))
}, 1000 / 60);
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "card shadow-sm" style = "">
<h2 style = "margin:0px auto;">tim 1</h2>
<div style = "margin:0px auto;">
<h1 id = "display0">00:00:00:00</h1>
</div>
<div class = "card-body" style = "margin:0px auto;">
<div class = "d-flex justify-content-between align-items-center">
<div class = "btn-group" role = "group" aria-label = "Basic outlined example"><button type = "button"
class = "btn btn-outline-success start01" style = "display:block" id = "start0"><i class = "bi bi-play"></i>
start</button>
<button type = "button" class = "btn btn-outline-warning stop01" style = "display:none"
id = "stop0"><i class = "bi bi-pause"></i> pause</button>
<br><button type = "button"
class = "btn btn-outline-danger reset01" id = "reset0"><i class = "bi bi-stop-fill"></i> reset</button></div>
</div>
</div>
</div>
почему часы var делятся на 216000?
Ваш ответ можно улучшить, добавив дополнительную информацию о том, что делает код и как он помогает ОП.