9

ユーザーが入力時間 (start_time、end_time) を選択するフォームに 2 つのフィールドがあり、これらのフィールドの変更時に、別のフィールドの値を再計算したいと考えています。

私がやりたいのは、2回の間の時間数を取得することです。たとえば、start_time が 5:30 で end time が 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);
4

4 に答える 4

15

試す

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

フィドルを持っている

于 2012-08-09T12:54:39.690 に答える
6
   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);
于 2012-08-09T13:01:52.683 に答える
6

出力の形式によって異なります。Date オブジェクトで計算を行う場合、エポック時間 (1970 年 1 月 1 日 00:00:00 UTC) からのミリ秒に変換されます。この 2 つを引くと (どちらが大きいかわからない場合は絶対値を取る)、2 つの間の生のミリ秒数が得られます。

そこから、必要な形式に変換できます。秒数を取得するには、その数値を で割るだけ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 時間を超える場合は、24 時間間の「距離」を実際には表していない情報になってしまうことに注意してください。 2。

于 2012-08-09T12:59:07.723 に答える
3

これを試して :

var diff = new Date("Aug 08 2012 9:30") - new Date("Aug 08 2012 5:30");
diff_time = diff/(60*60*1000);
于 2012-08-09T12:51:28.993 に答える