计算从到达时间到完成时间的小时数,但是

时间:2016-06-01 15:31:15

标签: javascript jquery

我有一个在线表格,用户输入到达时间,完成时间,花费的小时数,税率,然后是费率。这很好但如果我们已经进入到达时间和完成时间,我应该可以自动获得时间。

实施例

如果一个人在上午11:00到达某个地点并在下午1:00离开,则总时数应为2.00。

如果一个人在下午5:30到达某个地点并在晚上7:30离开,则总时数应为2.30。

我需要这样做,但我遇到了问题:

HTML

      <input type="text" name="start" id="start" placeholder="start"> <br>

      <input type="text" name="end" id="end" placeholder="end" ><br>

      <input type="text" name="hours" id="hours" placeholder="hours"><br>

的Javascript

    $(document).ready(function() {

          myFunction();
          $("#start, #end").on("keydown keyup", function() {
              myFunction();
          });
      });


      function myFunction() {
        var start = document.getElementById('start').value;
        var end = document.getElementById('end').value;


         s = start.split(':');
         e = end.split(':');
         min = e[1]-s[1];
         hour_carry = 0;
         if(min < 0){
             min += 60;
             hour_carry += 1;
         }
         hour = e[0]-s[0]-hour_carry;
         min = ((min/60)*100).toString()
         diff = hour + "." + min.substring(0,2);
         document.getElementById("hours").value = diff;

        }

Jsfiddle

1 个答案:

答案 0 :(得分:0)

如果小时数超过12:00,则您遇到的问题是负数。

以下是修复它的代码,它假设下一次出现小时而不是之后。例如:5:30-4:30将是11小时,而不是23小时。它会考虑上午5:30 - 下午4:30或下午5:30 - 凌晨4:30(在您的场景中看起来并不重要)。

s = start.split(':');
e = end.split(':');
for(var i=0;i<s.length;i++) {
    s[i] = parseFloat(s[i]);
}
for(var i=0;i<e.length;i++) {
    e[i] = parseFloat(e[i]);
}
if(s[0] > e[0]) {
   s[0] = s[0] - 12;
   console.log("true");
}

确保将数字解析为浮点值。然后,如果开始时间大于结束时间,则从开始时间减去12。

小提琴:https://jsfiddle.net/e5cb7o0o/

相关问题