2015-01-07 3 views
-2

Мне нужно рассчитать разницу во времени между временем, заданным в строках. У меня раз в строках см нижеПолучить разницу во времени Между двумя раз в Javascript

var time1 = "07:50"; 
    var time2 = "08:30"; 
    var time3 = "24:00"; 

    for calculating time difference.I tried like this code snippets 

    var date1 = new Date(2015, 01,07, time1.split(":")[0],time1.split(":")[1]); 
    var date2 = new Date(2015, 01, 07, time2.split(":")[0], time2.split(":")[1]); 
    var date3 = new Date(2015, 01, 07, time3.split(":")[0], time3.split(":")[1]); 

    if (date2 > date1) { 
     var diff = date2 - date1; 
    } 

Это Working.While меня третий раз принять time3 и добавление состояние, как показано ниже

if (date2 > date1) { 
     var diff = date2 - date1; 
    }else{ 
     var diff = date3-date2+date1; 
    }   

Теперь разница не показывая correctly.How я могу получить точные часы и минуты разница. Любой другой простой способ есть. Позвольте мне помочь

+0

* Diff * будет миллисекунды. Как вы конвертируете это в часы и минуты? – RobG

ответ

0

Вам не нужно создавать даты, просто конвертируйте строки в минуты. На основе исходного кода:

var t1 = time1.split(":")[0]*60 + time1.split(":")[1]*1; 
var t2 = time2.split(":")[0]*60 + time2.split(":")[1]*1; 
var t3 = time3.split(":")[0]*60 + time3.split(":")[1]*1; 

и теперь дифф будет мельчайший, что вы можете преобразовать в чч: мм:

var diff; 

if (t2 > t1) { 
    diff = t2 - t1; 
}else{ 
    diff = t3 - t2 + t1; 
} 

function pad(n) {return (n<10? '0':'') + n} 
var s = pad(diff/60 | 0) + ':' + pad(diff%60); 

console.log(s); // 00:40 

Какой результат вы ожидали?

Вы можете также использовать некоторые общие функции:

// Convert H:M:S to seconds 
// Seconds are optional (i.e. n:n is treated as h:s) 
function hmsToSeconds(s) { 
    var b = s.split(':'); 
    return b[0]*3600 + b[1]*60 + (+b[2] || 0); 
} 

// Convert seconds to hh:mm:ss 
function secondsToHMS(secs) { 
    function z(n){return (n<10?'0':'') + n;} 
    var sign = secs < 0? '-':''; 
    secs = Math.abs(secs); 
    return sign + z(secs/3600 |0) + ':' + z((secs%3600)/60 |0) + ':' + z(secs%60); 
} 

var t1 = hmsToSeconds(time1); 
var t2 = hmsToSeconds(time2); 
var t3 = hmsToSeconds(time3); 

var diff; 

if (t2 > t1) { 
    diff = secondsToHMS(t2 - t1); 
}else{ 
    diff = secondsToHMS(t3 - t2 + t1); 
} 

console.log(diff); // 00:40:00 
+0

Привет, чувак, он работает отлично. У вас мало сомнений в том, что вы положили {return (n <10? '0': '') + n}. Я не могу понять. Не могли бы вы объяснить, какую цель вы добавляете так: – Raja

+0

It добавляет начальный ноль к номерам менее 10. – RobG

Смежные вопросы