簡體   English   中英

以時間格式 hh:mm:ss 查找時間總和

[英]Find sum of time in an array of time format hh:mm:ss

我有這段代碼可以正確地找到格式 hh:mm 的總和我很難將它轉換為格式 hh:mm:ss 顯然一切都應該正確四舍五入。

這是我正在尋找使用的數組格式,但代碼顯然僅適用於 ["00", "10"] 作為示例

 const array = [ ["00", "00", "09"], ["00", "00", "09"], ["00", "00", "04"], ["00", "00", "02"], ["00", "00", "21"], ["00", "00", "14"], ["00", "00", "26"], ["00", "00", "02"], ["00", "00", "14"], ["00", "00", "10"], ["00", "00", "48"], ["00", "00", "12"], ["00", "00", "09"], ["00", "00", "09"] ] var mins = 0; var hrs = 0; if (array == null) { mins = Number(t1[1]) + Number(t2[1]); hrs = Math.floor(parseInt(mins / 60)); hrs = Number(t1[0]) + Number(t2[0]) + hrs; } else { $.each(array, function(key) { mins += Number(array[key][1]); hrs = Math.floor(parseInt(mins / 60)); hrs += Number(array[key][0]) + hrs; }); } console.log(mins, hrs)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

在這種情況下, t1t2只是兩個單獨的值要加在一起,然后有一堆這些值。 兩者都應該正常工作。

請幫我在這里添加正確的秒數。

你可以得到秒添加所有值並構建一個新的總和字符串。

 function sumTime(t1, t2, array = []) { var times = [3600, 60, 1], sum = [t1, t2, ...array] .map(s => s.split(':').reduce((s, v, i) => s + times[i] * v, 0)) .reduce((a, b) => a + b, 0); return times .map(t => [Math.floor(sum / t), sum %= t][0]) .map(v => v.toString().padStart(2, 0)) .join(':'); } console.log(sumTime("01:02:03", "04:57:57")); console.log(sumTime("00:00:09", "00:00:09", ["00:00:04", "00:00:02", "00:00:21", "00:00:14", "00:00:26", "00:00:02", "00:00:14", "00:00:10", "00:00:48", "00:00:12", "00:00:09", "00:00:09"]));

ES5

 function sumTime(t1, t2, array) { var times = [3600, 60, 1], sum = [t1, t2].filter(Boolean).concat(array || []) .map(function (s) { return s .split(':') // omit this line for splitted values ['02', '04', '45'] .reduce(function (s, v, i) { return s + times[i] * v; }, 0); }) .reduce(function (a, b) { return a + b; }, 0); return times .map(function (t) { var value = Math.floor(sum / t); sum %= t; return value; }) .map(function (v) { return v.toString().padStart(2, 0); }) .join(':'); } console.log(sumTime("01:02:03", null)); console.log(sumTime(null, "04:57:57")); console.log(sumTime(null, null, ["01:02:03", "04:57:57"])); console.log(sumTime("00:00:09", "00:00:09", ["00:00:04", "00:00:02", "00:00:21", "00:00:14", "00:00:26", "00:00:02", "00:00:14", "00:00:10", "00:00:48", "00:00:12", "00:00:09", "00:00:09"]));

使用拆分數組。

 function sumTime(t1, t2, array) { var times = [3600, 60, 1], sum = [t1, t2].filter(Boolean).concat(array || []) .map(function (s) { return s //.split(':') // omit this line for splitted values ['02', '04', '45'] .reduce(function (s, v, i) { return s + times[i] * v; }, 0); }) .reduce(function (a, b) { return a + b; }, 0); return times .map(function (t) { var value = Math.floor(sum / t); sum %= t; return value; }) .map(function (v) { return v.toString().padStart(2, 0); }) .join(':'); } console.log(sumTime(["01", "02", "03"], null)); console.log(sumTime(null, ["04", "57", "57"])); console.log(sumTime(null, null, [["01", "02", "03"], ["04", "57", "57"]])); console.log(sumTime(["00", "00", "09"], ["00", "00", "09"], [["00", "00", "04"], ["00", "00", "02"], ["00", "00", "21"], ["00", "00", "14"], ["00", "00", "26"], ["00", "00", "02"], ["00", "00", "14"], ["00", "00", "10"], ["00", "00", "48"], ["00", "00", "12"], ["00", "00", "09"], ["00", "00", "09"]]));

就像提到的其中一條評論一樣, moment是一個流行的 npm 包,用於處理時間。 您可以使用 moment 的格式選項解析數組數據結構中的時間:

const array = [
  [0, 0, 9],
  [0, 2, 3],
  [1, 2, 3],
   ...
];

const dates = array.map((date) => {
  return moment(`${date[0]}-${date[1]}-${date[2]}`, 'hh-mm-ss');
  // make sure you account for 12 or 24 hour clocks, not sure which you are using
});

const sum = dates.reduce((date, total) => { return total.add(date); }, moment.duration(0));

這幾乎是相同的數學,只是再應用一次幾秒 - > 分鍾。

seconds = t1[2] + t2[2];
mins = parseInt(seconds / 60);
seconds = seconds % 60;
mins += t1[1] + t2[1];
hrs = parseInt(minutes / 60);
mins = mins % 60;
hrs += t1[0] + t2[0];

我假設您已經知道如何通過簡單地使用splitNumberhh:mm:ss轉換為適當的數組,但以防萬一:

t1 = time1.split(':').map(part => Number(part));
t2 = time2.split(':').map(part => Number(part));

您可以使用reducer函數來匯總相應的數組元素,然后修改結果。

 var timeArrays = [ ['00', '52', '00'], ['00', '08', '00'], ['00', '00', '40'], ['00', '00', '01'], ['00', '00', '20'] ]; function totalTimeAsString(timeArray) { var result = ['00', '00', '00']; var reducer = function(acc, current) { return [ Number(acc[0]) + Number(current[0]), Number(acc[1]) + Number(current[1]), Number(acc[2]) + Number(current[2]) ]; }; var [hh, mm, ss] = timeArray.reduce(reducer, result); // seconds if (ss > 59) { mm += Math.floor(ss / 60); } ss = ss % 60; result[2] = ((ss < 10) ? '0' : '') + ss; // minutes if (mm > 59) { hh += Math.floor(mm / 60); } mm = mm % 60; result[1] = ((mm < 10) ? '0' : '') + mm; // hours result[0] = ((hh < 10) ? '0' : '') + hh; return result.join(':'); } console.log(totalTimeAsString(timeArrays)); // "01:01:01"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM