【问题标题】:Hour difference between two times(HH:MM:SS a)in momentjs时刻js中两次(HH:MM:SS a)之间的小时差
【发布时间】:2015-06-27 01:26:00
【问题描述】:

我有两次没有约会的时间

var startTime="12:16:59 am";
var endTime="06:12:07 pm";

我想使用moment.js.显示上述时间之间的总小时数

如果在moment.js 中无法使用,请通过javascript 告诉我。

输入:

var startTime="01:30:00 am";
var endTime="2:45:07 pm";

预期输出:

1 hour and 15 minutes

【问题讨论】:

标签: javascript jquery angularjs momentjs


【解决方案1】:

试试下面的代码

// start time and end time
var startTime = moment('12:16:59 am', 'HH:mm:ss a');
var endTime = moment('06:12:07 pm', 'HH:mm:ss a');

// calculate total duration
var duration = moment.duration(endTime.diff(startTime));

// duration in hours
var hours = parseInt(duration.asHours());

// duration in minutes
var minutes = parseInt(duration.asMinutes()) % 60;

alert(hours + ' hour and ' + minutes + ' minutes.');

在这里检查小提琴 - https://jsfiddle.net/nil4you/gs69Lv5x/

【讨论】:

  • var startTime=moment("09:00:00 pm", "HH:mm:ss a"); var endTime=moment("04:00:00 am", "HH:mm:ss a"); var duration = moment.duration(endTime.diff(startTime)); var hours = parseInt(duration.asHours()); var 分钟 = parseInt(duration.asMinutes())%60;警报(小时+'小时和'+分钟+'分钟。');输出为 -17 小时。但是应该是7个小时。如果我做错了什么,你能告诉我吗
  • 是的,我看到了,当我们将 pm 放在 am 之前时就会发生这种情况。大多数情况下,人们只在天气变化时才会计算。我找到了解决方案,但它不是一个强大的。一旦我可能在今天获得强大的解决方案,那么我将更新我的答案。
【解决方案2】:

获取时间

我通过使用此代码获得了时间

endTime.diff(startTime, 'hours')

获取分钟

我通过使用下面的代码得到了分钟

var mins = moment.utc(moment(endTime, "HH:mm:ss").diff(moment(startTime, "HH:mm:ss"))).format("mm")

我的工作代码是

$scope.UpdateTimeSheet = function (rowEntity) {   
  if (rowEntity.StartTime.toString().length != 11) {
    rowEntity.StartTime = moment(rowEntity.StartTime).format("hh:mm:ss a");
  }

  if (rowEntity.EndTime.toString().length != 11) {
    rowEntity.EndTime = moment(rowEntity.EndTime).format("hh:mm:ss a");
  }

  var startTime = moment(rowEntity.StartTime, "hh:mm:ss a");
  var endTime = moment(rowEntity.EndTime, "hh:mm:ss a");

  var mins = moment.utc(moment(endTime, "HH:mm:ss").diff(moment(startTime, "HH:mm:ss"))).format("mm")

  rowEntity.TotalHours = endTime.diff(startTime, 'hours') + " Hrs and " + mins + " Mns";

}

【讨论】:

    【解决方案3】:
    var startTime = moment("12:16:59 am", 'hh:mm:ss a');
    var endTime = moment("06:12:07 pm", 'hh:mm:ss a');
    
    endTime.diff(startTime, 'hours');
    

    【讨论】:

    • 只返回小时,而不是分钟 :( .
    • @RameshRajendran 您在问题中询问了总小时数。那么,您的确切期望是什么?
    • @RameshRajendran 我不认为 moment 对此有内置支持
    • @RameshRajendran 检查这个 - stackoverflow.com/questions/1787939/…
    【解决方案4】:
    //Get start time and end time
    var startTime = moment("12:16:59 am", "HH:mm:ss a"),
    endTime = moment("06:12:07 pm", "HH:mm:ss a");
    
    1. 方法一

    var dif = moment.duration(endTime.diff(startTime));
    console.log([dif.hours(), dif.minutes(), dif.seconds()].join(':'));
    console.log('dif in Mins: ', (dif.hours() * 60) + dif.minutes());
    
    1. 方法二

    console.log('hrs: ', moment(endTime).diff(startTime, 'hours'));
    console.log('dif in Mins: ', moment(endTime).diff(moment(startTime), 'minutes'));
    
    1. 方法3

    var hrs = moment.utc(endTime.diff(startTime)).format("HH");
    var min = moment.utc(endTime.diff(startTime)).format("mm");
    var sec = moment.utc(endTime.diff(startTime)).format("ss");
    console.log([hrs, min, sec].join(':'));
    
    1. 格式化输出

    var dif = moment.duration(endTime.diff(startTime));
    console.log(dif.humanize());
    

    【讨论】:

      【解决方案5】:

      myStart = "01:30:00 am";
      myEnd = "2:45:07 am";
      
      function getTimeDiff(start, end) {
      
        return moment.duration(moment(end, "HH:mm:ss a").diff(moment(start, "HH:mm:ss a")));
      }
      
      diff = getTimeDiff(myStart, myEnd)
      console.log(`${diff.hours()} Hour ${diff.minutes()} minutes`);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

      【讨论】:

        【解决方案6】:
        var startTime = moment("12:16:59 am", 'hh:mm:ss a');
        var endTime = moment("06:12:07 pm", 'hh:mm:ss a');
        
        var totalHours = (endTime.diff(startTime, 'hours'));
        var totalMinutes = endTime.diff(startTime, 'minutes');
        var clearMinutes = totalMinutes % 60;
        console.log(totalHours + " hours and " + clearMinutes + " minutes");
        

        【讨论】:

          【解决方案7】:
          var start = moment.duration("09:45", "HH:mm");
          var end = moment.duration("10:30", "HH:mm");
          var diff = end.subtract(start);
          diff.hours(); // return hours
          diff.minutes(); // return minutes
          

          【讨论】:

            【解决方案8】:

            这对我有用;迄今为止最好的解决方案

            function calculateTimeDifference() {
                var date1 = new Date();
                var date2 = new Date();
            
                var diff = date2.getTime() - date1.getTime();
            
                var msec = diff;
                var hh = `0${Math.floor(msec / 1000 / 60 / 60)}`;
                msec -= hh * 1000 * 60 * 60;
            
                var mm = `0${Math.floor(msec / 1000 / 60)}`;
                msec -= mm * 1000 * 60;
            
                var ss = `0${Math.floor(msec / 1000)}`;
                msec -= ss * 1000;
            
                return hh.slice(-2) + ":" + mm.slice(-2) + ":" + ss.slice(-2); 
            }
            

            【讨论】:

              【解决方案9】:

              对于 - "12:00:01" 格式没有 am, pm 格式跟随 os 代码..

                 var startTime = moment('12:00:01', 'hh:mm:ss a');
                 var endTime = moment('13:00:10' , 'hh:mm:ss a');
                 var totalHours = (endTime.diff(startTime, 'hours'));
                 var totalMinutes = endTime.diff(startTime, 'minutes');
                 var clearMinutes = totalMinutes % 60;
                 alert(totalHours + " hours and " + clearMinutes + " minutes");
              

              【讨论】:

                【解决方案10】:

                我知道这已被标记为已回答,但您实际上可以这样做......

                moment.utc(moment.duration(moment(dateA).diff(moment(dateB))).asMilliseconds()).format('HH:mm:ss');
                

                【讨论】:

                • 这真是丑陋的代码......你的代码有什么比另一个更好的吗?
                • 问题是你如何在momentjs中做到这一点,这就是如何做到这一点。
                • 这是唯一可以轻松更改格式的答案(例如 HH:mm:ss 到 mm:ss)
                【解决方案11】:

                var fromtime = moment($('#fromtime').val(), "HH:mm");
                var totime = moment($('#totime').val(), "HH:mm");
                var dif = moment.duration(totime.diff(fromtime));
                var diff = [dif.hours(), dif.minutes()].join(':');
                if(diff != "NaN:NaN" && dif.hours()>=0 && dif.minutes()>=0){
                    $('#duration').text([dif.hours(), dif.minutes()].join(':'));
                }else{
                    $('#duration').text('');
                }

                【讨论】:

                • 任何解释都会对观众有很大帮助。
                • 您的代码 sn-p 不起作用。也许只是使用代码 fences 而不是假装它是一个可运行的 sn-p?
                【解决方案12】:
                var startTime = moment("12:16:59");
                var endTime = moment("06:12:07");
                
                var duration = moment.duration(endTime.diff(startTime));
                var hours = duration.asHours();
                

                【讨论】:

                • 不鼓励像这样的 Moment 构造函数,将来会被删除。尝试使用格式:)
                猜你喜欢
                • 1970-01-01
                • 2014-01-03
                • 2018-11-18
                • 2019-09-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多