Учитывая массив раз:

["01:08", "03:46", "03:24", "05:53", "01:45", "03:32", "05:19", "08:56", "01:49", "05:40", "05:21", "02:40", "04:26", "02:02", "04:42", "03:58", "02:06", "02:46", "05:21", "03:37", "02:55", "03:26", "04:16", "01:32", "01:42", "03:22", "01:55", "01:41", "05:10", "00:45", "03:23", "05:08", "02:22", "02:34", "02:49", "01:18", "02:13", "01:37", "03:36", "05:26", "05:00", "02:41", "03:08", "01:00", "02:19", "02:33", "03:43", "01:35", "02:59", "01:38", "04:05", "04:15", "03:43", "03:43", "00:25"]

Где каждый раз - продолжительность минут и секунд.

Как я могу сложить эти длительности вместе, чтобы получить одну окончательную продолжительность?

Я пытался использовать объект даты, но я не могу понять это.

3
Johnston 17 Дек 2015 в 22:24

6 ответов

Лучший ответ

Для более функционального стиля вы можете использовать map, чтобы превратить каждый раз в формат секунд, а затем использовать reduce, чтобы получить сумму за все время.

function toSeconds(time) {
  var minutes = Number(time.slice(0, 2));
  var seconds = Number(time.slice(3));
  return seconds + minutes * 60;
}

function sum(a, b) {
  return a + b;
}

// Assuming your array is named 'arr'
var totalSeconds = arr.map(toSeconds).reduce(sum);
console.log(totalSeconds);
3
saadq 17 Дек 2015 в 19:41

Что с этим милым маленьким кусочком кода:

function sumUp(x){
  var min = 0;
  [].forEach.call(x, function(inst){
    var _x = inst.split(":");
    min += +(_x[0])*60 + +(_x[1]);
  });
  return Math.floor(min/60)+":"+(min%60);
}

Здесь x - массив времени.

0
void 17 Дек 2015 в 20:09

Разделите каждую запись на минуты и секунды и вычислите десятичное число минут. Сложите их, затем конвертируйте обратно в минуты и секунды.

Вот небольшая служебная функция для суммирования массива:

function add(a, b) { return a + b; }
function sum(a)    { return a.reduce(add); }

Напишите еще одну маленькую функцию, чтобы разделить запись времени и вернуть десятичное число минут. Мы будем использовать это в map ниже:

function split(x) { 
  var parts = elt.split(':');
  return +parts[0] + parts[1]/60;
}

Используйте функцию sum для суммирования результатов отображения каждого элемента вашего входного массива в десятичное число минут, используя split:

var minutes = sum(array.map(split));

Теперь вы можете распечатать полученное количество минут и секунд:

console.log(Math.floor(minutes), ":", (minutes - Math.floor(minutes))*60);
0
17 Дек 2015 в 19:46

Вот еще одно:

var t = ["01:08", "03:46", "03:24", "05:53", "01:45", "03:32", "05:19", "08:56", "01:49", "05:40", "05:21", "02:40", "04:26", "02:02", "04:42", "03:58", "02:06", "02:46", "05:21", "03:37", "02:55", "03:26", "04:16", "01:32", "01:42", "03:22", "01:55", "01:41", "05:10", "00:45", "03:23", "05:08", "02:22", "02:34", "02:49", "01:18", "02:13", "01:37", "03:36", "05:26", "05:00", "02:41", "03:08", "01:00", "02:19", "02:33", "03:43", "01:35", "02:59", "01:38", "04:05", "04:15", "03:43", "03:43", "00:25"];

var seconds = t.map(function(v) {
                      var ary = v.split(':');
                      return +ary[0] + ary[1] / 60;
              }).reduce(function(p, c) {
                          return p + c;
              });
2
Will 17 Дек 2015 в 19:40

Продолжайте общее количество секунд (seconds + (minutes * 60)), пока вы будете проходить по массиву. В конце конвертируйте из секунд в MM:SS формат.

var data = ["01:08", "03:46", "03:24", "05:53", "01:45", "03:32", "05:19", "08:56", "01:49", "05:40", "05:21", "02:40", "04:26", "02:02", "04:42", "03:58", "02:06", "02:46", "05:21", "03:37", "02:55", "03:26", "04:16", "01:32", "01:42", "03:22", "01:55", "01:41", "05:10", "00:45", "03:23", "05:08", "02:22", "02:34", "02:49", "01:18", "02:13", "01:37", "03:36", "05:26", "05:00", "02:41", "03:08", "01:00", "02:19", "02:33", "03:43", "01:35", "02:59", "01:38", "04:05", "04:15", "03:43", "03:43", "00:25"];

var durationSum = function(data) {
    var totalSeconds = 0;

    for (var i = 0; i < data.length; i++) {
        var split = data.split(':');
        var minutes = parseInt(split[0]);
        var seconds = parseInt(split[1]);

        totalSeconds = seconds + (minutes * 60);
    }

    var minutes = Math.floor(totalSeconds / 60);
    var seconds = totalSeconds - minutes;

    minutes = minutes.toString();
    seconds = seconds.toString();
    while (minutes.length < 2) minutes = '0' + minutes;
    while (seconds.length < 2) seconds = '0' + seconds;

    return minutes + ':' + seconds;
}

console.log(durationSum(data));
1
Gershom 17 Дек 2015 в 19:38
var da = ["01:08", "03:46", "03:24", "05:53", "01:45", "03:32", "05:19", "08:56", "01:49", "05:40", "05:21", "02:40", "04:26", "02:02", "04:42", "03:58", "02:06", "02:46", "05:21", "03:37", "02:55", "03:26", "04:16", "01:32", "01:42", "03:22", "01:55", "01:41", "05:10", "00:45", "03:23", "05:08", "02:22", "02:34", "02:49", "01:18", "02:13", "01:37", "03:36", "05:26", "05:00", "02:41", "03:08", "01:00", "02:19", "02:33", "03:43", "01:35", "02:59", "01:38", "04:05", "04:15", "03:43", "03:43", "00:25"];

var mins = 0;
var secs = 0;

for(var i=0; i<da.length; i++) {
  mins = mins + Number(da[i].substr(0, 2));
  secs = secs + Number(da[i].substr(3, 2));
}

mins = mins + Math.floor(secs / 60);
secs = secs % 60;

console.log(mins + ":" + secs);
0
Riad Baghbanli 17 Дек 2015 в 19:58