2012-06-05 73 views
4

我懶得在每個月底結束時填寫我的工作表,因此我開始在我們的PDF表格中添加一些功能。 Acrobat Pro提供了使用JavaScript進行高級計算,但我堅持這個問題。如何將時間轉換爲Javascript中的十進制數字?

我有兩個字段,其中我輸入了開始/結束工作的時間。我想計算我的加班時間並在第三個字段輸出結果。然而,我希望輸出是十進制的,所以當我加班半小時時,結果將是0.5

例如:我的工作時間是8.5小時,我開始了7.30,並在16:00(下午4點)結束。

我迄今爲止代碼:

var workTime = this.getField ("Work time").value; 
var startTime = this.getField ("Start time").value; 
var endTime = this.getField ("End time").value; 

event.value = workTime - (endTime - startTime); 

回答

13

獨立小時和分鐘,由60鴻溝分鐘,加入到幾小時。

function timeStringToFloat(time) { 
    var hoursMinutes = time.split(/[.:]/); 
    var hours = parseInt(hoursMinutes[0], 10); 
    var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0; 
    return hours + minutes/60; 
} 
+6

'回報(小時+分鐘/ 60).toFixed(2);'我敢打賭,我們首先要做[如何回合時間在JavaScript中最近的一刻鐘](http://stackoverflow.com/questions/4968250/how-to-round-time-to-the-nearest-quarter-hour-in-javascript) – mplungjan

+0

四捨五入的浮動不在問題中,但如果它是,就是這樣做的。 :p – Amadan

1

在我來說,我用它來發票計算時間。

輸入可能包含這些6級的方式把它寫用戶:

  • 1 - > 1小時0分鐘
  • 1,2 - > 1時12分
  • 1.5 - > 1小時30分鐘
  • 1:30 - > 1小時30分鐘
  • 1h40 - > 1小時40分鐘
  • 45米 - > 0小時45分鐘

所以我用這個(感謝Amadan),這裏是工作代碼:使用

function time2dec(tIn) { 
    if(tIn == '') 
     return 0; 
    if(tIn.indexOf('h') >= 0 || tIn.indexOf(':') >= 0) 
     return hm2dec(tIn.split(/[h:]/)); 
    if(tIn.indexOf('m') >= 0) 
     return hm2dec([0,tIn.replace('m','')]); 
    if(tIn.indexOf(',') >= 0) 
     return parseFloat(tIn.split(',').join('.')).toFixed(2); 
    if(tIn.indexOf('.') >= 0) 
     return parseFloat(tIn); 
    return parseInt(tIn, 10); 
} 

function hm2dec(hoursMinutes) { 
    var hours = parseInt(hoursMinutes[0], 10); 
    var minutes = hoursMinutes[1] ? parseInt(hoursMinutes[1], 10) : 0; 
    return (hours + minutes/60).toFixed(2); 
} 

例(使用jQuery):

var qty = time2dec($('#qty').val()); 
var price = parseFloat($('#price').val()); 
var total = (qty * price).toFixed(2); 

希望它可以幫助我們中的一些。

0

另一種方式;)

var aHours = 4.45; 

var aHoursInMinutes = (Math.floor(aHours) * 60)+ ((aHours - Math.floor(aHours)) * 100); 
// 285 minutes; 

var afromMinutesToHours = 
(Math.floor(aHoursInMinutes /60) + ((aHoursInMinutes - (60* Math.floor(aHoursInMinutes /60)))/100)); 
// 4.45 hours; 

var bHours = 0.33; 

var bHoursInMinutes = (Math.floor(bHours) * 60)+ ((bHours - Math.floor(bHours)) * 100); // 33 minutes; 

var bFromMinutesToHours = 
(Math.floor(bHoursInMinutes/60) + ((bHoursInMinutes - (60 * Math.floor(bHoursInMinutes/60)))/100)); // 0.33 hours; 

var resultInMinutes = aHoursInMinutes + bHoursInMinutes; 
var resultToHours = 
(Math.floor(resultInMinutes/60) + ((resultInMinutes - (60 * Math.floor(resultInMinutes/60)))/100)); // 5.18 hours; 
相關問題