как преобразовать минуты в часы и минуты с вычтенным временем (вычтенные значения времени)

Я хочу вычесть два разных 24-часового формата времени.

Я пробовал со следующим:

var startingTimeValue = 04:40;
var endTimeValue = 00:55;
var hour = startingTimeValue.split(":");
var hour1 = endTimeValue.split(":");

var th = 1 * hour[0] - 1 * hour1[0];
var tm = 1 * hour[1] - 1 * hour1[1];

var time = th+":"+tm;

Этот код работает нормально, если вторая минута не больше, чем первая. Но в другом случае он вернет отрицательные значения.

Приведенные выше примеры значений кода приводят:

time1 : 04:40
time2 : 00:55

Результат должен быть в формате: 03:45 (h:mi). Но сейчас я получаю 04:-5 с минусовым значением.

Я пробовал использовать ссылку как: вычесть минуты из рассчитанного времени javascript, но это не работает с форматом 00:00. Итак, как рассчитать значение результата и перевести его в часы и минуты?


person Dharmaraja.k    schedule 06.11.2013    source источник
comment
Просто интересно, почему ваше endTime раньше вашего startTime? Кажется немного отсталым ;)   -  person Moob    schedule 06.11.2013


Ответы (4)


Я бы попробовал что-то вроде следующего. На мой взгляд, всегда лучше разбить его на общую единицу, а затем заняться простой математикой.

function diffHours (h1, h2) {

    /* Converts "hh:mm" format to a total in minutes */
    function toMinutes (hh) {
        hh = hh.split(':');
        return (parseInt(hh[0], 10) * 60) + parseInt(hh[1], 10);
    }

    /* Converts total in minutes to "hh:mm" format */
    function toText (m) {
        var minutes = m % 60;
        var hours = Math.floor(m / 60);

        minutes = (minutes < 10 ? '0' : '') + minutes;
        hours = (hours < 10 ? '0' : '') + hours;

        return hours + ':' + minutes;
    }

    h1 = toMinutes(h1);
    h2 = toMinutes(h2);

    var diff = h2 - h1;

    return toText(diff);
}
person btx9000    schedule 06.11.2013

Пытаться:

var time1 = Date.UTC(0,0,0,4,40,0);
var time2 = Date.UTC(0,0,0,0,55,0);

var subtractedValue = time1 - time2;

var timeResult = new Date(subtractedValue);

console.log(timeResult.getUTCHours() + ":" + timeResult.getUTCMinutes());

ДЕМО

В этом решении используется встроенная дата javascript. Как это устроено:

var time1 = Date.UTC(0,0,0,4,40,0);
var time2 = Date.UTC(0,0,0,0,55,0);

time1, time2 – количество миллисекунд, прошедших с 01 января 1970 года 00:00:00 UTC.

var subtractedValue = time1 - time2;

subtractedValue – это разница в миллисекундах.

var timeResult = new Date(subtractedValue);

console.log(timeResult.getUTCHours() + ":" + timeResult.getUTCMinutes());

Эти строки реконструируют объект даты, чтобы получить часы и минуты.

person Khanh TO    schedule 06.11.2013

Это работает лучше, скрипка, которую я только что нашел

var difference = Math.abs(toSeconds(a) - toSeconds(b));

скрипка

person Bharath R    schedule 06.11.2013

Этот метод может работать для вас:

function timeDiff(s,e){
    var startTime = new Date("1/1/1900 " + s);
    var endTime = new Date("1/1/1900 " + e);
    var diff = startTime - endTime;
    var result = new Date(diff);
    var h = result.getUTCHours();
    var m = result.getUTCMinutes();    
    return (h<=9 ? '0' + h : h) + ':' + (m <= 9 ? '0' + m : m);
}

var startingTimeValue = "04:40";
var endTimeValue = "00:55";
var formattedDifference = timeDiff(startingTimeValue,endTimeValue);

Демонстрация: http://jsfiddle.net/zRVSg/

person Moob    schedule 06.11.2013