#javascript #arrays #input #time #format
#javascript #массивы #ввод #время #формат
Вопрос:
У меня есть калькулятор времени, который возвращает тип ввода времени в следующем формате: чч / мм / сс
В настоящее время он отображается следующим образом:
Let time = "03:00:00"
Когда я выполняю функцию вычисления, вместо этого она возвращает «3: 0: 0» и удаляет «0».
Как я могу изменить это на 03:00:00? «0» должно добавляться только в том случае, если h / m / s меньше 10.
Вот моя функция вычисления, если это необходимо. Функция возвращает сумму времени для массива:
let testOne = ["02:00:00", "01:00:00", "01:00:00"]
function test () {
let calTotalHours = testOne.map(t => t.split(':')).reduce((arr,item,index)=>{
arr[0] = parseFloat(item[0]);
arr[1] = parseFloat(item[1]);
arr[2] = parseFloat(item[2]);
if(arr[2]>=60) {
arr[1] ;
arr[2]%=60;
}
if(arr[1]>=60) {
arr[0] ;
arr[1]%=60;
}
return arr;
},[0,0,0])
.join(':')
console.log(calTotalHours)
}
Комментарии:
1. Вы уже ответили на свой вопрос: «если h / m / s меньше 10». Используйте
if
оператор, чтобы проверить, является ли значение меньше 10 (или длина <2), и добавьте ноль2. Да, я пробовал это, но не смог решить. Когда я добавляю 0, это не позволяет мне возвращать arr в конце.
Ответ №1:
Вам нужно добавить нули после reduce , поскольку reduce все еще вычисляет время.
Я добавил a .map
после вычисления, чтобы получить каждое значение времени, а затем проверить, является ли значение меньше 10:
.map((v) => (v < 10) ? v = "0" v : v)
let testOne = ["02:00:00", "01:00:00", "01:00:00"]
function test() {
let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {
arr[0] = parseFloat(item[0]);
arr[1] = parseFloat(item[1]);
arr[2] = parseFloat(item[2]);
if (arr[2] >= 60) {
arr[1] ;
arr[2] %= 60;
}
if (arr[1] >= 60) {
arr[0] ;
arr[1] %= 60;
}
return arr;
}, [0, 0, 0]).map((v) => (v < 10) ? v = "0" v : v).join(':')
console.log(calTotalHours)
}
test()
Комментарии:
1. Спасибо, чувак! Карта была именно тем, что я искал! Спасибо 🙂
Ответ №2:
Вы можете сделать что-то подобное, чтобы получить то, что вы хотите, используя padStart()
функцию
let testOne = ["02:00:00", "01:00:00", "01:00:00"]
function test() {
let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {
arr[0] = parseFloat(item[0]);
arr[1] = parseFloat(item[1]);
arr[2] = parseFloat(item[2]);
if (arr[2] >= 60) {
arr[1] ;
arr[2] %= 60;
}
if (arr[1] >= 60) {
arr[0] ;
arr[1] %= 60;
}
return arr;
}, [0, 0, 0])
.map((num) => num.toString().padStart(2, 0)) //add 0 to each value here if they are less than 10
.join(':');
console.log(calTotalHours);
}
test();
Комментарии:
1. использование
padStart
здесь было приятным, дало мне 12. pasStart также может выполнить эту работу! Спасибо за пример. Я уже пометил ответ Кальвина как решаемый, но это тоже работает.
Ответ №3:
Вы могли бы попробовать использовать .padStart() перед присоединением к массиву:
.map(num => num.toString().padStart(2, '0'))
Это заполнит начальные 0, где длина меньше 2