以编程方式从单元格添加时间

时间:2014-01-30 18:32:15

标签: javascript google-apps-script

我有一个电子表格,我用它来记录我如何在项目上花费时间。在该电子表格中,我有几列,其中一列是做某事的时间,另一列是某事物的类别(例如会议或会计或致电客户)。我正在尝试编写一个脚本,我传递了类别的名称,然后循环遍历所有行以查看类别是否等于我传递的类别,如果是,则将时间添加到计数器。但是我无法将时间加在一起。到目前为止我所拥有的是:

function getTimeInCat(cat){
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var time = new Date();
  var counter = 0;

  for(var i = 6; i < numRows; i++){
    var carCell = "F" + i;
    var cellName = "E" + i;
    if(sheet.getRange(i, 6).getValue() == cat){
      time += sheet.getRange(i, 5).getValue();
      counter++;
    }
  }
  return time;
}

而不是我想要的,我得到了回报:

  

Thu Jan 30 2014 18:29:22 GMT-0000(GMT)1899年12月30日星期六00:50:39 GMT-0000(GMT)1899年12月30日星期六00:05:39 GMT-0000(GMT)

编辑:它给出了适当数量的行(该测试的残余仍在代码中)

2 个答案:

答案 0 :(得分:0)

尝试var time = 0. Date()我认为会将你的时间转换为日期。

答案 1 :(得分:0)

这些单元格的值实际上是Date对象。这就是为什么在将单元格的值添加到一起时获得一长串时间戳的原因。无论出于何种原因,谷歌决定当你进入一个持续时间时,实际上它将是HH:mm:ss在12/30/1899之后的偏移量。尝试将这些时间的格式更改为日期(格式&gt;数字&gt;日期),您会看到它更改为该日期。

幸运的是,使用Date对象,您可以使用getTime() function来获取总持续时间。 getTime()给出了自1970年1月1日以来的毫秒数,因此它实际上会为这些单元格返回非常大的负数,但这很容易管理。您只需创建一个日期为12/30/1899的Date对象作为日期,然后从所需单元格的值中减去该对象。

var base = new Date("12/30/1899").getTime(); // -2.2091436E12
var cell = sheet.getRange(row,col).getValue().getTime(); // some other large negative number
var delta = cell - base; // this should be your duration in milliseconds