【问题标题】:Jquery time difference in hours from two fields两个字段的 Jquery 时间差(以小时为单位)
【发布时间】:2012-08-06 16:47:05
【问题描述】:

我的表单中有两个字段,用户可以在其中选择输入时间(开始时间、结束时间),我想在更改这些字段时重新计算另一个字段的值。

我想做的是获得两次之间的小时数。因此,例如,如果我的 start_time 为 5:30,结束时间为 7:50,我想将结果 2:33 放入另一个字段。

我输入的表格时间格式为 HH:MM:SS

到目前为止,我已经尝试过......

$('#start_time,#end_time').on('change',function() 
{
  var start_time = $('#start_time').val();
  var end_time = $('#end_time').val();

    var diff =  new Date(end_time) - new Date( start_time);  



  $('#setup_hours').val(diff);

【问题讨论】:

  • 2:33, 2.332:20 代替?
  • new Date("1970-1-1 " + end_time)。只是时间本身就是一个日期?不这么认为……
  • 2.33 小数的第二部分应该是总小时数的百分比。所以 2:20 在这种情况下 20/60 是 0.33
  • 输入中没有包含日期​​,它只是“HH:MM:SS”
  • @lifeinthefridge,所以使用一个固定的日期片段

标签: javascript jquery time


【解决方案1】:

试试

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

have a fiddle

【讨论】:

  • 我得到了一个从这里返回的 NaN 结果?这也是我在尝试使用此答案时遇到的问题?
  • 例如。我有新日期(“1970-1-1 12:00”)-新日期(“1970-1-1 10:55”))/1000/60/60。答案是 1.083333 ... 1 是 HOUR,但为什么要 0.83 表示分钟?似乎答案是 1.05 1 小时 5 分钟?我有点困惑。也许这个得到正确答案jsfiddle.net/VDnND
  • @aldrien 没有它的 1.083 小时。如果您希望 TOTAL 分钟乘以 1.083333 乘以 60 - 秒乘以 60 等等。OP 确实要求了几个小时,总是有 abs()
【解决方案2】:
   var start = '5:30';
   var end = '7:50';
   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);
   alert(diff);

【讨论】:

    【解决方案3】:

    这取决于您希望输出的格式。使用 Date 对象进行数学运算时,它将它们转换为自纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数。通过将两者相减(如果您不知道哪个更大,则取绝对值),您可以获得两者之间的 毫秒 原始数。

    从那里,您可以将其转换为您想要的任何格式。要获得秒数,只需将该数字除以1000。获取小时、分钟和秒:

    var diff =  Math.abs(new Date(end_time) - new Date(start_time));
    var seconds = Math.floor(diff/1000); //ignore any left over units smaller than a second
    var minutes = Math.floor(seconds/60); 
    seconds = seconds % 60;
    var hours = Math.floor(minutes/60);
    minutes = minutes % 60;
    
    alert("Diff = " + hours + ":" + minutes + ":" + seconds);
    

    您当然可以通过一些条件使其更智能,但这只是为了向您展示使用数学您可以将其格式化为您想要的任何形式。请记住,Date 对象始终有一个日期,而不仅仅是一个时间,因此您可以将其存储在 Date 对象中,但如果它大于 24 小时,您最终将得到的信息并不真正代表两者之间的“距离”两个。

    【讨论】:

    • 感谢您的详细回复!虽然这不一定是我用来格式化时间的确切方法,但这篇文章帮助我更好地理解了日期函数和可能性。
    【解决方案4】:

    试试这个:

    var diff = new Date("Aug 08 2012 9:30") - new Date("Aug 08 2012 5:30");
    diff_time = diff/(60*60*1000);
    

    【讨论】:

    • 如果我使用任何大于 23 的分钟值,我会从这里返回一个 NaN 结果?奇怪......但是,我得到了一个非常大的返回数字,我认为这是 ngmiceli 之前提到的原始毫秒数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多