задача с цифрами в часах

let x = '10:10'
let s = x.split(':')
console.log(s)
Задачу нужно решить следующим образом: нужно с помощью split разделить то что в переменной, потом отнять 45 минут(0:45)от второй части, проблема в следующем не могу получить 9։25


Ответы (3 шт):

Автор решения: grime

const tt = '10:10';
const divin = '0:45';
console.log(new Date(new Date(`0 ${tt}`) - new Date(`0 ${divin}`)).toISOString().slice(11, 16));

→ Ссылка
Автор решения: Vladimir

В моем примере, нет стрелочных функций, но если вы планируете их использовать, то вам вполне подойдет решение с использованием классов и ес6

class Clock {
  constructor(string) {
    const [hours, minutes] = string.split(':');
    this.hours = Number(hours) || 0;
    this.minutes = Number(minutes) || 0;
  }
  changeMinutes(minutes = 0) {
    const diff = this.minutes + minutes;
    this.hours += Math.floor(diff / 60);
    this.minutes = Math.abs((60 + diff) % 60);
  }
  toString() {
    return `${`${this.hours}`.padStart(2, '0')}:${`${this.minutes}`.padStart(2, '0')}`;
  }
}

const clock = new Clock('10:10');
console.log('before', clock.toString());
clock.changeMinutes(-45)
console.log('after', clock.toString());

→ Ссылка
Автор решения: Anton Shchyrov

let x = '10:10';
const subs = '0:45';

const corr = [0, 60]; // коэффициенты корректировки
let s = x.split(':').reduceRight(
  (sum, cur, idx) => {
    // Вычитаем из текущего разряда соответствующий разряд аккумулятора
    sum[idx] = cur - sum[idx];
    if (sum[idx] < 0 && idx >= 0) {  // если получили переполнение
      // прибавляем корректировочный коэффициент
      sum[idx] += corr[idx];
      // и добавляем единицу в следующий разряд
      sum[idx - 1]++;
    }
    return sum;
  },
  subs.split(':')  // в качестве аккумулятора отдаем массив
);
console.log(s.join(':'));

→ Ссылка