2014-01-30 56 views
0

我有一张电子表格,用于说明我是如何在项目上度过的。在该电子表格中,我有几列,其中一个是花时间做某事,另一个是什么东西(例如会议或会计或呼叫客户)的类别。我正在尝试编写一个脚本,通过类别的名称,然后循环遍历所有行,以查看类别是否等于我传递的类别,如果是,则会将时间添加到计数器。然而,我无法将时间加在一起。我到目前为止是这样的:以编程方式在单元格中添加时间

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; 
} 

而不是我想要什么我得到的回报是:

周四2014年1月30日18点29分22秒格林尼治标准时间0000(GMT)周六12月30日1899 00:50:39 GMT-0000(GMT)1899年12月30日星期六00:05:39 GMT-0000(GMT)

编辑:它给出适量的行仍然在代码中)

+0

开始于时间字段中保存的内容即getRange(i,6).getValue()。它是整数小时吗? –

+0

Abhishek Ram它是一个默认的时间格式(HH:mm:ss) – Dirk

+0

因此,预期的输出是相同格式的总小时数? –

回答

0

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

0

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

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

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 
相关问题