【问题标题】:How to calculate the working hours between two times? [duplicate]如何计算两次之间的工作时间? [复制]
【发布时间】:2014-07-17 12:54:17
【问题描述】:

我想计算两次之间的差。

时间格式为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;

【问题讨论】:

  • 您用 jquery 标记了问题,但是您提供的代码没有 jquery。您是在寻找只有纯 js 的解决方案,还是 jquery 也可以?虽然看起来根本不需要 jquery
  • 最后一行是纯“给我的代码”,会让你投反对票,我会删除它
  • 如果你搜索这个,你会得到很多不同的解决方案......
  • 他已经表现出一些努力,所以为什么不指导他呢?尝试将这些时间更改为秒,计算以秒为单位的差异,然后更改回小时。

标签: javascript datetime time


【解决方案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>

【讨论】:

    【解决方案2】:

    试试这个会有帮助

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

    【讨论】:

    • 以上代码返回NaN
    • 尝试解析 int 就可以了
    【解决方案3】:

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

    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

    【讨论】:

      【解决方案4】:

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

      您的代码看起来过于复杂,请考虑以下问题。它通过首先将它们转换为秒来获取两次之间的差异,获取差异,然后转换回 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
      

      【讨论】:

        猜你喜欢
        • 2021-09-09
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多