簡體   English   中英

Javascript-如何計算兩個給定時間之間的差異? (小時-分鍾)

[英]Javascript - How can I work out the difference between two given times? (hours-minutes)

我有兩組“選擇”元素,用戶可以在其中兩次輸入。 看起來像這樣:

Start:
[hour] [minute] [meridian]

End:
[hour] [minute] [meridian]

我正在嘗試利用這些時間來找出差異。 這樣我就可以輸出:

Difference: 1.25 HRS

您可能知道,十進制格式表示1小時15分鍾。 用戶還可以單擊一個復選框,如果選中該復選框,將花費30分鍾。 這是我當前的代碼:

var startHours     = parseInt($start.find('.times:eq(0)')[0].value);
var startMinutes   = parseInt($start.find('.times:eq(1)')[0].value);
var startMeridian  = $start.find('.times:eq(2)')[0].value

if (startMeridian == 'PM')
   startHours += 12;

var finishHours    = parseInt($finish.find('.times:eq(0)')[0].value);
var finishMinutes  = parseInt($finish.find('.times:eq(1)')[0].value);
var finishMeridian = $finish.find('.times:eq(2)')[0].value

if (finishMeridian == 'PM')
   finishHours += 12;

// compute the difference
var completeHours   = finishHours - startHours;
var completeMinutes = finishMinutes - startMinutes;
var newTime = 0;

if (completeHours < 0 || completeMinutes < 0)
   newTime = '0.0';
else
   newTime = completeHours + '.' + completeMinutes; 

var hadBreak = $parent.parents('tr').next('tr').find('.breakTaken')[0].checked;

if (hadBreak)
{
   time    = newTime.split('.');
   hours   = time[0];
   minutes = time[1];

   minutes = minutes - 30;

   if (minutes < 0)
   {
      minutes = 60 - (minutes * 1);
      hours   = hours - 1;
   }

   newTime = (hours < 0) ? '0.0' : hours + '.' + minutes;
}

$parent.parents('tr').next('tr').find('.subtotal')[0].innerHTML = newTime;

total += parseFloat(newTime);

失敗了...我在做什么錯?

為了節省您的麻煩,我建議使用Date對象,這非常方便:

var startDate = new Date(year, month, date, hour, minute, second, millisecond);
var endDate = new Date(year, month, date, hour2, minute2, second2, millisecond2);
// You can skip hours, minutes, seconds and milliseconds if you so choose

var difference = endDate - startDate; // Difference in milliseconds

從那里您可以計算出這兩個日期之間經過的天數,小時數和分鍾數。

 newTime = (hours < 0) ? '0.0' : hours + '.' + minutes;

是錯誤的-分鍾可能是15分鍾,但您希望將其打印出來。 因此,您需要:

 var MinutesDisplay = minutes/60*100;
 newTime = (hours < 0) ? '0.0' : hours + '.' + (MinutesDisplay.toFixed(0));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM