时间算术计算错误

时间:2017-08-02 20:50:22

标签: google-apps-script google-sheets

我在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中的单元格被编辑时,它就会运行一个经过验证的函数名称 - 开始或结束。

如果' start',它将单元格b1(已验证的任务名称列表)的值放在第一列,将当前时间放在MM / DD / YYYY HH:MM:SS格式中。

如果'结束',它是第三列中MM / DD / YYYY HH:MM:SS格式的当前时间,并试图将" start"时间和"结束"第四列中的时间,或计算。

这是错误(或者我对gsheets的工作原理缺乏了解)

代码产生以下内容:

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

问题 - 什么是2,418?总持续时间应为2秒,或00:00:02。鉴于上述代码,它是代码问题还是单元格问题的格式?

当我放入单元格d2 = c2-b2时,只要将列格式化为持续时间,它就可以正常工作。但我不愿意这样做,因为插入或开始/结束时间取决于最后一行 - 所以如果我将公式复制/粘贴到gsheet的底部,那么数据将不会连续。

1 个答案:

答案 0 :(得分:1)

JavaScript时间戳以毫秒为单位。除以1000得到秒。

另外,像你一样使用eval似乎是一个非常糟糕的主意。我会在那里使用switch语句,如果输入的函数不是选项之一,则会为用户显示错误。如果他们输入“stat”而不是“start”,你的代码会默默地失败。