После того как отнял число после .split() не получается применить .join()
let x = '10:45'
let s = x.split(':')
.reduceRight((a)=>a-45)
.join(':')
console.log(s)
почему не работает join()
Ответы (2 шт):
Автор решения: Alexander Lonberg
→ Ссылка
Только я не понимаю, что из этого должно получиться
let x = '10:45'
let s = x.split(':')
.reverse()
.map((a) => a - 45)
.reverse()
.join(':')
console.log(s)
Не спрашивайте почему я написал .reverse().map().reverse(),
это эмуляция того что хотел автор вопроса reduceRight
UPD надо было с самого начала и спрашивать: Как реализовать часы?
class Clock {
constructor() {
this.date = new Date()
this.show()
}
increment(min) {
this.date.setMilliseconds(this.date.getMilliseconds() + min * 60 * 1000)
this.show()
}
decrement(min) {
this.date.setMilliseconds(this.date.getMilliseconds() - min * 60 * 1000)
this.show()
}
show() {
console.log(this.date.toLocaleTimeString(undefined,
{hour: '2-digit', minute: '2-digit' })
)
}
}
const time = new Clock()
time.increment(10)
time.decrement(45)
time.increment(45)
time.decrement(10)
Автор решения: Denis640Kb
→ Ссылка
Если Вы совсем не хотите использовать параметр Date, а хотите работать со строкой, то используйте перевод в секунды.
Работает и в том случае, если отнимаете от времени, к примеру, 0:30
let x = '10:45';
let s = x.split(':');
let minus = 55; // Переводим 45 минут в секунды.
let TimeinSec = (s[0] * 3600) + (s[1] * 60) - (minus * 60); // Переводим время в секунды и отнимаем 45 минут в секундах.
if (TimeinSec < 0){ //Если получилось отрицательное число, то отнимаем от 24 часов.
TimeinSec = (24 * 3600) + TimeinSec; // Плюс, так как, если TimeinSec < 0, то число отрицательное.
}
var h = TimeinSec/3600 ^ 0 ; // Переводим обратно в часы и минуты (часов)
var m = (TimeinSec-h*3600)/60 ^ 0 ; // Переводим обратно в часы и минуты (минут)
let NewTime = h + ':' + m; // Канкатенация в одну строку.
console.log(NewTime);