2010-08-26 51 views
1

我有兩組'select'元素,用戶可以輸入兩次。它看起來像這樣:Javascript - 我如何計算兩次給定時間之間的差異? (小時 - 分鐘)

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); 

這是失敗的......我做錯了什麼?

+1

它是否因錯誤而失敗或者它是否正確執行計算? – spbfox 2010-08-26 05:46:27

+0

它不能正確執行計算。詳細說一下,在我給出的例子中,輸出結果爲「1.25 HRS」,意思是「1小時15分鐘」。我的代碼輸出「1.15」。 – dave 2010-08-26 05:49:40

+0

當然,它會顯示.15,因爲你只需要幾分鐘而不用60分鐘就可以得到分數。 – spbfox 2010-08-26 06:34:45

回答

0

爲了節省您的麻煩,我會建議使用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 

從那裏你可以計算出這兩個日期之間的日子一天天過去,小時和分鐘。

+0

我對日期對象不太熟悉。是否有可能跳過「年,月,日」並輸入「小時,分鐘」?然後,我會如何將毫秒轉換爲我想要的格式? – dave 2010-08-26 06:04:43

0

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

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

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