2017-08-02 96 views
1

我有一個gsheet下面的代碼 -時間算術計算錯誤

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
var task = ss.getRange(1,2).getValue(); //ss.getRange("A2").getValue(); 
var date = new Date(); 

function onEdit(e) { 
    if (e.range.getA1Notation() == 'B2') { 
    if (/^\w+$/.test(e.value)) { 
    // console.log(e.value); 

     eval(e.value)(); 
     e.range.clear(); 
    } 
    } 
} 

function Start() { 
var last = ss.getLastRow(); 
    ss.getRange(last+1, 1).setValue(task); 
    ss.getRange(last+1, 2).setValue(date); 
} 


function End() { 
var last = ss.getLastRow();   
    ss.getRange(last, 3).setValue(date); 

    var endTime = ss.getRange(last, 3).getValue(); 
    var startTime = ss.getRange(last, 2).getValue(); 
    ss.getRange(last, 4).setValue(endTime-startTime); 
} 

每當在B2單元格進行編輯時,它運行的功能驗證的人物之一 - 無論是開始還是結束。

如果「開始」,它把在首列的單元格B1(任務名稱的驗證列表)的值,和當前時間在MM/DD/YYYY HH:MM:SS格式。

如果'結束',其當前時間以第三列中的MM/DD/YYYY HH:MM:SS格式顯示,並嘗試將第四個「開始」時間和「結束」時間之間的差值列或計算。

這裏的錯誤(或我缺乏瞭解如何gsheets作品)

的代碼產生如下:

Task|  Start   |  End   | Duration 
DOS | 8/2/2017 16:44:28 | 8/2/2017 16:44:31 | 2,418.00 

問題 - 什麼是2418?總持續時間應該是2秒,或者00:00:02。鑑於上述代碼,它是一個代碼問題還是單元格問題的格式?

當我把在D2單元格= C2-B2,它只要列被格式化爲一個時間正常工作。但我寧願不這樣做,因爲插入或開始/結束時間取決於最後一行 - 所以如果我將公式複製/粘貼到gsheet底部,數據將不會連續。

回答

1

JavaScript的時間戳以毫秒爲單位。除以1000獲得秒數。

此外,使用eval像你這樣好像一個非常糟糕的主意。我會用一個switch聲明那裏,併爲用戶顯示一個錯誤,如果輸入的功能是不是選項之一。就像這樣,如果你的代碼輸入「stat」而不是「start」,你的代碼就會失敗。