2015-05-04 38 views
0

我想創建一個自定義函數來計算兩個或多個小時之間的持續時間。結果可能是正面的或負面的。如何計算電子表格的Google腳本中兩次之間的持續時間

其他人可以在任何給定座標中使用該功能而不受限於特定範圍。

例輸入:

Inputs:     Output: 
A  B  C  D 

-26:55 06:38 22:39 -04:16 
02:19 00:00 04:33 02:19 

我沒有成功許多替代的嘗試:

function saldo(A,B,C) { // best desired... 

if(A == 0) { 
    return (-B)+C ; 
} 
else if (A<0 && (-A)<C && (-A)-C<B){ 
    return (A)+C-B; 
} 
else if (A<0 && (-A)>C){ 
    return (-B); 
} 


function xis(A,B) { 

// var addedDate = sheet.getRange(1,1).getValue(); 
// var a1 = Utilities.formatDate(A, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "HH:mm"); 
// var b1 = Utilities.formatDate(B, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "HH:mm"); 


var a1 = new Date.getHours(A) + date.getMinutes(A); 
var b1 = new Date.getHours(B) + date.getMinutes(B); 

    if (a1 > b1){ 

    return B; 
    } 

    else { 
    return A; 
    } 

} 



function tentativa(a,b){ 
    var t1 = a.getTime(); 
    var t2 = b.getTime(); 

var outnumber = t1 - t2; 

    return Utilities.formatDate(new Date(outnumber), "GMT-3", "hh:mm"); 
} 

function worked(time1,time2)  
{         
//var time1; 
//var time2; 
var outnumber = time1 - time2; 
// return msToTime(outnumber) 
    return msToTime(outnumber); 
// return Utilities.formatDate(new Date(outnumber), "GMT", "HH:mm"); 
} 

function msToTime(duration) { 
    var milliseconds = parseInt((duration%1000)/100) 
     , seconds = parseInt((duration/1000)%60) 
     , minutes = parseInt((duration/(1000*60))%60) 
     , hours = parseInt((duration/(1000*60*60))%24); 

    // hours = hours : hours; 
    // minutes = minutes : minutes; 
    // seconds = (seconds < 10) ? "0" + seconds : seconds; 

    return hours + ":" + minutes + ":" + seconds; 
} 
+0

你剛剛問你昨天問過的[這個問題](http://stackoverflow.com/questions/29987856/google-scripts-subtracting-times)嗎? – Mogsdad

+0

我不是在重複問這個問題,我試圖發佈前一個問題,但失敗了,我又試了一次。 – Lean

回答

1

你應該只需要2個輸入找到兩個時變量之間的區別。

我有一個小的javascript code snippet它需要2個輸入hh:mm格式並輸出差異。您可以推斷hh:mm:ss格式的邏輯。您可以重複調用該功能來解決3個或更多輸入。

// Code snippet to calculate the difference between 2 inputs of time in hh:mm 24hrs format 
// Author: Harish Narayanan 
// Date: 04-May-2015 

function getHourDiff(a, b) { 
    if (!isValidHour(a) || !isValidHour(b)) { 
     return "Invalid input(s)"; 
    } 

    var h1 = a.split(":"), h2 = b.split(":"); 
    var h = 0, m = 0; 
    h = h1[0] - h2[0]; 
    m = h1[1] - h2[1]; 

    if (h < 0) { 
     h = -h; 
     m = -m; 
    } 
    if (h == 0) { 
     m = Math.abs(m); 
    } 
    if (m < 0) { 
     m = m + 60; 
     h = h - 1; 
    } 

    return h+":"+m; 
} 

function isValidHour(hour) { 
    hourPattern = "^([01]?[0-9]|2[0-3]):[0-5][0-9]$"; 
    if (hour.match(hourPattern)) {return true;} 
    return false; 
} 
+0

@EricLeschinski我明白你的觀點。我還提供了一個答案,原始海報可以用來推斷。所以我想看看這是否有助於OP在刪除答案之前。 – Harish

+1

這是一個很好的答案,每個stackoverflow答案都應該保留給特定問題的具體和明確的答案。在這種情況下,OP沒有提出具體的問題,所以我編輯了原始問題以便明確地說明他想要的內容,然後改變了答案來回答這個問題。如果它整齊地適合,總是將外部站點的代碼粘貼到答案中是很好的。 (總是期望外部鏈接下降)。與尋求指導的人一起玩20個問題通常是由於stackoverflow不是論壇而導致的倒票。 –

+0

@EricLeschinski:這是一個有效的點,鏈接可能會下降。 – Harish