Как получить из двух значений времени, используя jQuery / Javascript? - PullRequest
1 голос
/ 12 марта 2011

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

Два значения, которые я хотел бы получить, - сумма в формате ЧЧ: ММ (00:00).

Спасибо!

Ответы [ 5 ]

4 голосов
/ 12 марта 2011

Написание собственных функций времени и даты может стать сложным.Зачем заново изобретать колесо.Взгляните на превосходную библиотеку дат http://www.datejs.com/.Он обрабатывает все задачи, связанные с датой и временем, и его использование очень просто.

2 голосов
/ 12 марта 2011

Вот то, что я лежал вокруг. Он допускает бесконечное количество аргументов, так что вы можете иметь addTime('01:00') или addTime('01:00', '02:00', '03:00', '04:00') и т. Д. Это три функции длиной, потому что он также проверяет, правильно ли введено время, и если нет, то форматирует их. (Например, гарантирует, что минуты имеют длину 2 цифры, а если часы имеют длину 1 цифра, то добавьте их к одному нулю и т. Д.)

Вы можете поиграть с ним здесь: http://jsfiddle.net/WyxwU/

Это также здесь:

var totalTime = addTime('12:34', '56:12', '78:45');
document.write(totalTime);

function addTime()
{
    if (arguments.length < 2)
    {
        if (arguments.length == 1 && isFormattedDate(arguments[0])) return arguments[0];
        else return false;
    }

    var time1Split, time2Split, totalHours, totalMinutes;
    if (isFormattedDate(arguments[0])) var totalTime = arguments[0];
    else return false;

    for (var i = 1; i < arguments.length; i++)
    {
        // Add them up
        time1Split = totalTime.split(':');
        time2Split = arguments[i].split(':');

        totalHours = parseInt(time1Split[0]) + parseInt(time2Split[0]);
        totalMinutes = parseInt(time1Split[1]) + parseInt(time2Split[1]);

        // If total minutes is more than 59, then convert to hours and minutes
        if (totalMinutes > 59)
        {
            totalHours += Math.floor(totalMinutes / 60);
            totalMinutes = totalMinutes % 60;
        }

        totalTime = totalHours + ':' + padWithZeros(totalMinutes);
    }

    return totalTime;
}

function isFormattedDate(date)
{
    var splitDate = date.split(':');
    if (splitDate.length == 2 && (parseInt(splitDate[0]) + '').length <= 2 && (parseInt(splitDate[1]) + '').length <= 2) return true;
    else return false;
}

function padWithZeros(number)
{
    var lengthOfNumber = (parseInt(number) + '').length;
    if (lengthOfNumber == 2) return number;
    else if (lengthOfNumber == 1) return '0' + number;
    else if (lengthOfNumber == 0) return '00';
    else return false;
}
1 голос
/ 12 марта 2011

Вот простой код JS для этого,


var a = "2:50";
var b = "2:15";

var splitTimeStr = function(t){
        var t = t.split(":");
        t[0] = Number(t[0]);
            t[1] = Number(t[1]);
        return t;
};

var addTime = function(t1, t2){
    var t1Hr = splitTimeStr(t1)[0];
    var t1Min = splitTimeStr(t1)[1];
    var t2Hr = splitTimeStr(t2)[0];
    var t2Min = splitTimeStr(t2)[1];
    var rHr = t1Hr + t2Hr;
    var rMin = t1Min + t2Min;
    if (rMin >= 60)
    {
        rMin = rMin - 60;
        rHr = rHr + 1;
    }
    if (rMin < 10) rMin = "0" + rMin;
    if (rHr < 10) rHr = "0" + rHr;
    return "" + rHr + ":" + rMin;
};

document.write(addTime(a, b));

Вы можете проверить / проиграть это с кодом здесь: http://jsfiddle.net/z24v7/

0 голосов
/ 13 марта 2011

Я бы разбил проблему на подзадачи, которые можно использовать повторно. Вы должны беспокоиться здесь:

  1. Обработка временной строки в формате "чч: мм": преобразование этого в минуты имеет смысл, потому что, похоже, это временная гранулярность, с которой вы работаете.
  2. Форматирование заданного количества минут в строку времени в формате "чч: мм".

Тот факт, что вы добавляете два раза вместе, отвлекает от двух вышеупомянутых проблем.

  1. Разобрать строку времени в минуты:

    function parseMinutes(s) {
        var tokens = s.split(":");
        return tokens[0] * 60 + parseInt(tokens[1]);
    }
    
  2. Форматирование минут в строку времени:

    function formatMinutes(minutes) {
        function pad(n) {
            return n > 9
                ? n
                : ("0" + n);
        }
    
        var hours = Math.floor(minutes / 60),
            mins = minutes % 60;
        return pad(hours) + ":" + pad(mins);
    }
    

Тогда ваша конкретная проблема может быть решена с помощью:

var sum = formatMinutes(parseMinutes(a) + parseMinutes(b));
0 голосов
/ 12 марта 2011

То, что вы должны сделать, это вычислить их до десятичного числа, что я имею в виду. Вычеркните умноженное число часов / минут на 60 + до минут

// убираем часы l_hour = Number (l_time $ .substr (0, l_pos)); // Удаляем минуты l_min = Number (l_time $ .substr (l_pos + 1, l_time $ .length)); // добавить два значения, разделенные на 60 минут l_time_decimal = Number (Math.abs (l_hour)) + Number (Math.abs (l_min) / 60);

Сделайте это для каждого значения, затем вычтите две цифры, чтобы получить разницу (т. Е. Затраченное время). Все, что осталось, это преобразовать его обратно из десятичного числа во время l_difference_in_min = l_difference * 60; l_time_mins = l_difference_in_min% 60; l_time_hours = (l_difference_in_min - l_mins) / 60;

Теперь просто отформатируйте два, чтобы быть ЧЧ: ММ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...