【问题标题】:How to get of two time values using jQuery/Javascript?如何使用 jQuery/Javascript 获取两个时间值?
【发布时间】:2011-03-12 20:10:51
【问题描述】:

我有两个值用于表示完成任务所需的时间。如何将这些值加在一起得出总小时数和分钟数,但仍然有 60 分钟等于一小时的值帐户?

我想得到总和的两个值和总值的格式是 HH:MM (00:00)。

谢谢!

【问题讨论】:

    标签: javascript jquery time


    【解决方案1】:

    编写您自己的时间和日期函数可能会变得复杂。为什么要重新发明轮子。看看优秀的http://www.datejs.com/ 日期库。它处理所有与日期和时间相关的任务,使用非常简单。

    【讨论】:

      【解决方案2】:

      这是我放的东西。它允许无限数量的参数,因此您可以使用addTime('01:00')addTime('01:00', '02:00', '03:00', '04:00') 等。它有三个函数,因为它还验证输入的时间是否正确格式化,如果没有,则格式化它们。 (例如,确保分钟是 2 位长,如果小时是 1 位长,则用一个零填充,等等)

      你可以在这里玩:http://jsfiddle.net/WyxwU/

      它也在这里:

      var totalTime = addTime('12:34', '56:12', '78:45');
      document.write(totalTime);
      
      function addTime()
      {
          if (arguments.length < 2)
          {
              if (arguments.length == 1 && isFormattedDate(arguments[0])) return arguments[0];
              else return false;
          }
      
          var time1Split, time2Split, totalHours, totalMinutes;
          if (isFormattedDate(arguments[0])) var totalTime = arguments[0];
          else return false;
      
          for (var i = 1; i < arguments.length; i++)
          {
              // Add them up
              time1Split = totalTime.split(':');
              time2Split = arguments[i].split(':');
      
              totalHours = parseInt(time1Split[0]) + parseInt(time2Split[0]);
              totalMinutes = parseInt(time1Split[1]) + parseInt(time2Split[1]);
      
              // If total minutes is more than 59, then convert to hours and minutes
              if (totalMinutes > 59)
              {
                  totalHours += Math.floor(totalMinutes / 60);
                  totalMinutes = totalMinutes % 60;
              }
      
              totalTime = totalHours + ':' + padWithZeros(totalMinutes);
          }
      
          return totalTime;
      }
      
      function isFormattedDate(date)
      {
          var splitDate = date.split(':');
          if (splitDate.length == 2 && (parseInt(splitDate[0]) + '').length <= 2 && (parseInt(splitDate[1]) + '').length <= 2) return true;
          else return false;
      }
      
      function padWithZeros(number)
      {
          var lengthOfNumber = (parseInt(number) + '').length;
          if (lengthOfNumber == 2) return number;
          else if (lengthOfNumber == 1) return '0' + number;
          else if (lengthOfNumber == 0) return '00';
          else return false;
      }
      

      【讨论】:

        【解决方案3】:

        这里是简单的 JS 代码,

        
        var a = "2:50";
        var b = "2:15";
        
        var splitTimeStr = function(t){
                var t = t.split(":");
                t[0] = Number(t[0]);
                    t[1] = Number(t[1]);
                return t;
        };
        
        var addTime = function(t1, t2){
            var t1Hr = splitTimeStr(t1)[0];
            var t1Min = splitTimeStr(t1)[1];
            var t2Hr = splitTimeStr(t2)[0];
            var t2Min = splitTimeStr(t2)[1];
            var rHr = t1Hr + t2Hr;
            var rMin = t1Min + t2Min;
            if (rMin >= 60)
            {
                rMin = rMin - 60;
                rHr = rHr + 1;
            }
            if (rMin < 10) rMin = "0" + rMin;
            if (rHr < 10) rHr = "0" + rHr;
            return "" + rHr + ":" + rMin;
        };
        
        document.write(addTime(a, b));
        

        您可以在此处使用代码验证/播放此内容:http://jsfiddle.net/z24v7/

        【讨论】:

        • @Sime,好多了,但我还是不明白为什么有人投了反对票。
        • 不知道。它发生了。在这里,抓住 +1 :)
        • @Sime,谢谢,我是 SO 新手。这次投票让我很沮丧,但我也看到了动力:)
        【解决方案4】:

        你要做的就是将它们计算到小数点。 将小时/分钟数减去 60 + 到分钟数

        //去掉时间 l_hour = Number(l_time$.substr(0, l_pos)); //去掉分钟 l_min = Number(l_time$.substr(l_pos + 1, l_time$.length)); //将两个值相加除以 60 分钟 l_time_decimal= Number(Math.abs(l_hour)) + Number(Math.abs(l_min)/60);

        对每个值执行此操作,然后减去两个数字以得出差异(即所用时间)。剩下的就是将它从小数转换回时间 l_difference_in_min = l_difference * 60; l_time_mins = l_difference_in_min%60; l_time_hours = (l_difference_in_min - l_mins)/60;

        现在只需将两者格式化为 HH:MM

        【讨论】:

          【解决方案5】:

          我会将问题分解为可重用的子任务。您必须在这里担心:

          1. 以“hh:mm”格式处理时间字符串:将其转换为分钟是有意义的,因为它似乎是您正在操作的时间粒度。
          2. 将给定的分钟数格式化为“hh:mm”格式的时间字符串。

          您将两次相加的事实是对上述两个实际问题的转移。

          1. 将时间字符串解析为分钟:

            function parseMinutes(s) {
                var tokens = s.split(":");
                return tokens[0] * 60 + parseInt(tokens[1]);
            }
            
          2. 将分钟格式化为时间字符串:

            function formatMinutes(minutes) {
                function pad(n) {
                    return n > 9
                        ? n
                        : ("0" + n);
                }
            
                var hours = Math.floor(minutes / 60),
                    mins = minutes % 60;
                return pad(hours) + ":" + pad(mins);
            }
            

          那么您的具体问题可以通过以下方式解决:

          var sum = formatMinutes(parseMinutes(a) + parseMinutes(b));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-26
            • 1970-01-01
            • 1970-01-01
            • 2012-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多