2014-07-17 61 views
-2

我想计算两次之间的差异。如何计算两次之间的工作时间?

的时间格式为Intime="00:05:53"Outtime="00:17:31"

我尝试下面的代码,但我越来越喜欢totalhours="00:-12:22". 而不是totalhours="00:11:38"结果。我究竟做错了什么?我怎样才能解决这个问题?

var inhh=0; 
    var inmm=0; 
    var inss=0;  

    var outhh=0; 
    var outmm=0; 
    var outss=0;  

    var inTime = document.getElementById("intime").value; 
    var outTime = document.getElementById("outtime").value;  

    var intimeAarry=inTime.split(":"); 
    inhh= parseInt(intimeAarry[0]); 
    inmm=parseInt(intimeAarry[1]); 
    inss=parseInt(intimeAarry[2]); 

    if (inss > 60) { 
     inmm = inmm + 1; 
     inss = inss % 60; 
    } 
    if (inmm > 60) { 
     inhh = inhh + 1; 
     inmm = inmm % 60; 
    } 
     var hh; 
      var mm; 
      var ss;   

    var outtimeArray=outTime.split(":"); 
    outhh= parseInt(outtimeArray[0]); 
    outmm=parseInt(outtimeArray[1]); 
    outss=parseInt(outtimeArray[2]); 

    if (outss > 60) { 
     outmm = outmm + 1; 
     outss = outss % 60; 
    } 
    if (outmm > 60) { 
     outhh = outhh + 1; 
     outmm = outmm % 60; 
    }   

    hh=outhh-inhh; 
    mm=outmm-inmm; 
    ss=outss-inss; 

    var hhh = hh == 0 ? "0" + hh : hh; 
    var mmm = mm == 0 ? "0" + mm : mm; 
    var sss = ss == 0 ? "0" + ss : ss; 
    var totalhours = hhh + ":" + mmm + ":" + sss; 
+1

您所标记的问题与jQuery但您所提供的代码有没有jQuery的。你正在寻找一个只有纯j的解决方案,或者jquery也可以在那里?虽然它看起来并不需要jquery – Huangism

+1

这最后一行是纯粹的“给我一个codez”,并会让你低估,我会删除它 –

+0

http://jsfiddle.net/VDnND/171/ –

回答

1

检查出http://momentjs.com/为所有您的日期和时间需求。

<script src="http://momentjs.com/downloads/moment.min.js"></script> 
<script> 
    (function(){ 

    var Intime = moment("00:05:53", "HH:mm:ss"); 
    var Outtime = moment("00:17:31", "HH:mm:ss"); 

    console.log(Outtime.diff(Intime, "minutes"));   

    })() 
</script> 
1

试试这将是有益的

var diff = (new Date("1970-1-1 " + Outtime) - new Date("1970-1-1 " + Intime))/1000/60/60; 
+0

上面的代码返回NaN – Roshan

+0

尝试解析int它会工作 – NandaIN

0

你的代码失败的原因是,你不能简单地减去部分彼此。一个简单的策略是将它们转换为一个通用单位,进行相减,然后转换回合适的格式。

您的代码看起来过于复杂,请考虑以下事项。它通过他们首先转换成秒得到两个时间之间的差异,得到的差值,然后转换回以hh时间:mm:ss格式:

// Return seconds given a time in h:m:s format 
function timeToSecs(t) { 
    var b = t.split(':'); 
    return b[0]*3.6e3 + b[1]*60 + +b[2]; 
} 

// Return hh:mm:ss given seconds 
function secsToTime(s) { 
    function z(n){return (n<10? '0' : '') + n} 
    var sign = s < 0? '-' : ''; 
    s = Math.abs(s); 
    return sign + z(s/3.6e3|0) + ':' + z(s%3.6e3/60|0) + ':' + z(s%60); 
} 

// Return the difference between two times in h:m:s format 
function (t0, t1) { 
    return secsToTime(timeToSecs(t1) - timeToSecs(t0)); 
} 

console.log(getTimeDiff('00:05:53', '00:17:31')); // 00:11:38 
console.log(getTimeDiff('00:17:31', '00:05:53')); // -00:11:38 
console.log(getTimeDiff('08:57:01', '17:23:41')); // 08:26:40 
0

你正在做的可以通过实现的方式下面的代码

var Intime="01:55:02"; 
var Outtime="05:23:01"; 

var IntA=Intime.split(":"); 

var inhh=parseInt(IntA[0]) 
var inmm=parseInt(IntA[1]) 
var inss=parseInt(IntA[2]) 

var outA=Outtime.split(":"); 

var ouhh=parseInt(outA[0]) 
var oumm=parseInt(outA[1]) 
var ouss=parseInt(outA[2]) 
if(ouhh>inhh) 
{ 
if((ouss-inss)<0) 
    { 
    oumm=oumm-1; 
    rss=60+ouss-inss; 
    } 
    else 
    { 
    rss=ouss-inss; 
    } 

    if((oumm-inmm)<0) 
    { 
    ouhh=ouhh-1; 
    rmm=60+oumm-inmm; 
    } 
    else 
    { 
    rmm=oumm-inmm; 
    } 

rhh=ouhh-inhh; 
var diff=rhh+":"+rmm+":"+rss 
console.log(diff)//is the required difference 

} 

在捣鼓这是here