Почему не идёт проверка и получаются отрицательные значения?
Есть вот такая часть кода. startTime и stopTime - массивы с часом, минутой, секундой и милисекундой, которые прописаны намного выше.
let h, min, s, ms;
h = stopTime[0]-startTime[0];
min = stopTime[1]-startTime[1];
s = stopTime[2]-startTime[2];
ms = stopTime[3]-startTime[3];
console.log([h,min,s,ms]);
if (ms<0){
--s;
ms = ms + 1000;
if (s<0){
--min;
s = s + 60;
if (min<0){
--h;
min = min + 60;
}
}
}
Данная часть кода должна отнимать соответствующие единицы времени первого массива из массива второго и если есть отрицительные значения, то приводить всё к положительным.
К сожалению, иногда получается такое:
Не могу понять где ошибка. Помогите, пожалуйста, её отыскать.
Ответы (2 шт):
Автор решения: Aliaksandr Plekhau
→ Ссылка
Программа будет проверять секунды только если милисекунды получились отрицательными. Надо так:
if (ms<0) {
--s;
ms = ms + 1000;
}
if (s<0) {
--min;
s = s + 60;
}
if (min<0) {
--h;
min = min + 60;
}
Автор решения: vp_arth
→ Ссылка
Что-то вы всё переусложнили.
Содержать время в массиве слишком муторно, лучше вычислять компоненты по необходимости.
См. функцию timeToStr:
let h;
function timeToStr(time) {
const ms = time % 1000;
time = time / 1000 |0;
const s = time % 60;
time = time / 60 |0;
const min = time % 60;
time = time / 60 |0;
const hours = time % 24;
const days = time / 24 |0;
let parts = [];
if (days) parts.push(`${days} d `);
if (hours || days) parts.push(`${hours}:`);
parts.push(`${(min+'').padStart(2, '0')}:${(s+'').padStart(2, '0')}:${(ms+'').padStart(3, '0')}`)
return parts.join('');
}
const timer = document.querySelector('#timer');
const mul = document.querySelector('[name=multiplier]');
let startTime, duration;
function start() {
startTime = Date.now();
let m = mul.value || 1;
mul.style.display = 'none';
if (h) clearInterval(h);
h = setInterval(() => {
timer.innerText = timeToStr((Date.now()-startTime)*m);
}, 50)
}
function stop() {
duration = Date.now()-startTime;
clearInterval(h);
h = null;
mul.style.display = '';
}
<span id="timer">0:00.000</span><hr/>
<button onclick="start()">Start</button>
<button onclick="stop()">Stop</button><br/>
<input name="multiplier" value="1" type="number" title="Ускоритель времени">
