【问题标题】:Difference between two dates in minute, hours javascript两个日期之间的分钟差,小时javascript
【发布时间】:2014-01-17 08:36:05
【问题描述】:

我想找出两个日期之间的差异。我已经尝试过这段代码,但它给了我错误的值。我想得到两个日期之间的总分钟数,所以我将小时转换为分钟并添加到分钟。

var hourDiff = timeEnd - timeStart;
var diffHrs = Math.round((hourDiff % 86400000) / 3600000);
var diffMins = Math.round(((hourDiff % 86400000) % 3600000) / 60000);
diffMins = diffMins + (diffHrs * 60);

这里timeEndMon Jan 01 2007 11:30:00 GMT+0530 (India Standard Time)

timeStartMon Jan 01 2007 11:00:00 GMT+0530 (India Standard Time)

如果小时差我得到1,它应该是0 和分钟我得到30 这是正确的。但是小时数应该是0。我在这里做错了吗?

【问题讨论】:

    标签: javascript time


    【解决方案1】:

    试试:

    var diffHrs = Math.floor((hourDiff % 86400000) / 3600000);
    

    Math.round0.5 小时差四舍五入到1。您只想在小时变量中获取“完整”小时数,是否使用 Math.floor() 从变量中删除所有分钟数

    【讨论】:

      【解决方案2】:

      试试这个:

      var startDate = new Date('Jan 01 2007 11:00:00');
      var endDate = new Date('Jan 01 2007 11:30:00');
      var starthour = parseInt(startDate.getHours());
      var endhour = parseInt(endDate.getHours());
      
      if(starthour>endhour){
          alert('Hours diff:' + parseInt(starthour-endhour));
      }
      else{
          alert('Hours diff:' + parseInt(endhour-starthour));
      }
      

      这是工作的fiddle

      【讨论】:

      • 如果要删除数字的小数部分,请使用 Math.floor() 而不是 parseInt()。 (这基本上让我们回到我的答案)jsperf test
      【解决方案3】:

      试试这个代码(使用 ms 作为初始单位)

      var timeStart = new Date("Mon Jan 01 2007 11:00:00 GMT+0530").getTime();
      var timeEnd = new Date("Mon Jan 01 2007 11:30:00 GMT+0530").getTime();
      var hourDiff = timeEnd - timeStart; //in ms
      var secDiff = hourDiff / 1000; //in s
      var minDiff = hourDiff / 60 / 1000; //in minutes
      var hDiff = hourDiff / 3600 / 1000; //in hours
      var humanReadable = {};
      humanReadable.hours = Math.floor(hDiff);
      humanReadable.minutes = minDiff - 60 * humanReadable.hours;
      console.log(humanReadable); //{hours: 0, minutes: 30}
      

      JSFiddle:http://jsfiddle.net/n2WgW/

      【讨论】:

      • 这归结为与我提出的相同建议:“使用Math.floor()”。尝试解释为什么你的答案有效,而不是仅仅在答案中转储一些代码。
      • @Cerbrus 是的,没错,是关于Math.floor。我的回答详细说明了将 ms 转换为秒、分钟和小时的方式。就是这样。
      • 它没有解释为什么这段代码会导致用户想要的答案。您只是使用不同的方法来获取数据。
      【解决方案4】:

      如果您确信差异将小于 24 小时,则以下方法有效。

      var timeStart= new Date('2015-01-01 03:45:45.890');
      var timeEnd = new Date('2015-01-01 05:12:34.567');
      var timeDiff = new Date(timeEnd.getTime() - timeStart.getTime());
      var humanTime = timeDiff.toISOString().substring(11, 23);
      var diffHours = timeDiff.toISOString().substring(11, 12);
      

      humanTime 是 01:26:48.677,diffHours 是 01

      【讨论】:

        【解决方案5】:
        var timeDiff = function (date1, date2) {
                var a = new Date(date1).getTime(),
                    b = new Date(date2).getTime(),
                    diff = {};
        
                diff.milliseconds = a > b ? a % b : b % a;
                diff.seconds = diff.milliseconds / 1000;
                diff.minutes = diff.seconds / 60;
                diff.hours = diff.minutes / 60;
                diff.days = diff.hours / 24;
                diff.weeks = diff.days / 7;
        
                return diff;
            }
        

        【讨论】:

          【解决方案6】:

          您可以使用以下方法获得以小时分钟和秒为单位的时差,例如倒计时:

          var diff = EndedTime - StartedTime;
          var hours   = Math.floor(diff / 3.6e6);
          var minutes = Math.floor((diff % 3.6e6) / 6e4);
          var seconds = Math.floor((diff % 6e4) / 1000);
          var duration = hours+":"+minutes+":"+seconds;
          

          希望得到帮助。谢谢

          【讨论】:

            【解决方案7】:

            你可以试试这个:-

            function diff_hours(dt2, dt1) 
             {
            
              var diff =(dt2.getTime() - dt1.getTime()) / 1000;
              diff /= (60 * 60);         // For Hours
              //diff /= (60);          For Minutes
              return Math.abs(Math.round(diff));
            
             }
            
            dt1 = new Date(2014,10,2);
            dt2 = new Date(2014,10,3);
            console.log(diff_hours(dt1, dt2));            // you will get '24' hours
            
            
            dt1 = new Date("October 13, 2014 08:11:00");
            dt2 = new Date("October 13, 2014 11:13:00");
            console.log(diff_hours(dt1, dt2));           // you will get '3' hours
            

            【讨论】:

              【解决方案8】:

              你可以得到小时和分钟格式的时差,如下所示

              const startTime = new Date(event.startTime);
              const endTime = new Date(event.endTime);
              const diff = endTime.getTime() - startTime.getTime();
              const hrDiff = diff / 3600 / 1000; // 1.555555
              const totalHours = parseFloat((hrDiff).toFixed(2)); // 1.5
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-05-19
                • 1970-01-01
                • 2011-07-29
                • 2012-10-26
                • 1970-01-01
                相关资源
                最近更新 更多