2014-03-05 39 views
0

我的工作,用戶使用timepicker來確定網絡時間表的Javascript時間差開始&結束時間,我想有形式自動查找兩個時間之間的差異,並將其放置在第3個輸入框。我知道我需要獲取這些值,將它們轉換爲毫秒,然後從第二個數字中減去第一個數字,然後將差值轉換回人類時間並在第三個框中顯示。但我似乎無法在javascript中轉換時間。這是我到目前爲止有:通過timepicker

function date1math(){ 

var date1in = document.getElementById("date-1-in").value; 
var date1out = document.getElementById("date-1-out").value; 

date1in = date1in.split(":"); 
date1out = date1out.split(":"); 
var date1inDate = new Date(0, 0, 0, date1in[0], date1in[1], 0); 
var date1outDate = new Date(0, 0, 0, date1out[0], date1out[1], 0); 
var date1math = date1outDate.getTime() - date1inDate.getTime(); 
var hours = Math.floor(date1math/1000/60/60); 
date1math -= hours * 1000 * 60 * 60; 
var minutes = Math.floor(date1math/1000/60); 

return (hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes; 

document.getElementById("date-1-subtotal").value = date1math(date1in, date1out); 
} 

我想從輸入輸入日期-1中,將timepicker結果(比如下午5:00)採取timepicker結果(比如9:00)日期 - 1-out,然後將差異作爲數字放入日期1-小計中。

+0

如果你傳遞一個新的日期(DATE2-DATE1),然後您可以使用調用getHours(),得到月()等來自新的日期,以確定所包含的日期部分的diff,長達一年。 – dandavis

回答

0

推測輸入的格式爲HH的字符串:毫米(例如9點54分),並且所述兩個字符串表示在同一天的時間。你不會提到am/pm後綴是否包含在內,但它在文本中存在,所以我認爲它可能是。

如果夏令時的變化可以忽略不計,最簡單的方法是將字符串轉換爲分鐘,找到差異,然後再轉換回小時和分鐘,例如:

// Convert hh:mm[am/pm] to minutes 
function timeStringToMins(s) { 
    s = s.split(':'); 
    s[0] = /m$/i.test(s[1]) && s[0] == 12? 0 : s[0]; 
    return s[0]*60 + parseInt(s[1]) + (/pm$/i.test(s[1])? 720 : 0); 
} 

// Return difference between two times in hh:mm[am/pm] format as hh:mm 
function getTimeDifference(t0, t1) { 

    // Small helper function to padd single digits 
    function z(n){return (n<10?'0':'') + n;} 

    // Get difference in minutes 
    var diff = timeStringToMins(t1) - timeStringToMins(t0); 

    // Format difference as hh:mm and return 
    return z(diff/60 | 0) + ':' + z(diff % 60); 
} 

var t0 = '09:15am'; 
var t1 = '05:00pm'; 

console.log(getTimeDifference('09:15am', '05:00pm')); // 07:45 
console.log(getTimeDifference('09:15', '17:00'));  // 07:45 

如果實行夏令時是合併後,您需要包含日期,以便可以創建日期對象並將其用於時差。以上可以使用12或24小時時間格式。

+0

謝謝,這樣做 - 我甚至能夠隔離功能,以便我可以在頁面上多次重複,並只調用每個動作的變量。謝謝! –

+0

嗨@RobG我已經遇到了使用12或12:30的問題,上午或下午,他們似乎搞砸了。是否有一條線可以添加到timeStringToMins(s)將「12」轉換爲「0」?我試圖 「如果(S [0]。價值== '12'){S [0]。價值== '0';}」,但不工作 –

+0

沒關係我加入「如果(一個或多個[得到它0] == '12'){S [0] = '0';}」到timeStringToMins起作用 –