Date Google Sheets脚本中的日期(持续时间)

Date Google Sheets脚本中的日期(持续时间),date,scripting,google-apps-script,google-sheets,Date,Scripting,Google Apps Script,Google Sheets,我有一张谷歌表格,有三列: -日期和时间(时间戳) -持续时间 -描述 我有一个脚本,当我在“描述”中写东西时,在“日期”中插入此时的日期和时间,以及“持续时间”: function onEdit(e) { if(e.source.getActiveSheet().getName() == "Sheet2" ) { var col = e.source.getActiveCell().getColumn(); if(col == 3 ) { // I'm in c

我有一张谷歌表格,有三列: -日期和时间(时间戳) -持续时间 -描述

我有一个脚本,当我在“描述”中写东西时,在“日期”中插入此时的日期和时间,以及“持续时间”:

function onEdit(e) {
  if(e.source.getActiveSheet().getName() == "Sheet2" ) {
    var col = e.source.getActiveCell().getColumn();
    if(col == 3 ) {
      // I'm in column three
      var cellTimeStamp = e.range.offset(0,-2); // First column of the same row
      var cellTimeDiff = e.range.offset(0,-1); // Second column of the same row
      var cellTimePrev = e.range.offset(-1,-2); // First column of the previous row

      var timeTimeStamp = new Date();
      var iniTime = cellTimePrev.getValue().getTime();
      var finTime = timeTimeStamp.getTime() ;
      var timeDiff = String(finTime - iniTime) ;


      cellTimeStamp.setValue(timeTimeStamp);  

      cellTimeDiff.setValue(timeDiff); // [***]


    }
  }    
}
当它(作为事件)在“Duration”列中执行时,没有格式为“HH:mm:ss”的内容

但如果我删除脚本中的最后一行,并在工作表中添加以下公式: =A3-A2(第3行) =A4-A3(第4行) ... 那就行了

我想知道如何满足相同的结果,但与脚本


提前感谢。

timeDiff是finTime-iniTime的结果,两者都是,这意味着我们有毫秒

将其转换为hh:mm:ss是一个简单的数学…:一分钟60秒一小时60分钟。。。 一个简单的代码可以是这样的:

function msToTime(s) {
  var ms = s % 1000;
  s = (s - ms) / 1000;
  var secs = s % 60;
  s = (s - secs) / 60;
  var mins = s % 60;
  var hrs = (s - mins) / 60;

  return hrs + ':' + mins + ':' + secs; // milliSecs are not shown but you can use ms if needed
}
如果您喜欢更常规地格式化字符串(每个值两位数),请不要忘记可以使用

示例如下:

  return Utilities.formatString("%02d",hrs) + ':' + Utilities.formatString("%02d",mins) + ':' + Utilities.formatString("%02d",secs);

编辑 以下是您的评论:

电子表格比您想象的更智能,您可以尝试下面的代码,您将看到结果实际上是一个时间值。(双击检查)

注意可以选择
setNumberFormat('hh:mm:ss')
,它只是强制电子表格显示
hour:min:sec
格式,但自动模式也可以


谢谢你的回答。事实上,我找的不是字符串,而是数字或日期。当我在表格中做减法运算(作为公式)时,我得到一个数字。然后,我从菜单格式中格式化它。但是如果我从脚本中删减,我就不能得到相同的数字(或日期)。这是我的问题。谢谢!!请看编辑,我的答案返回您要求的内容。非常感谢。很好用!!我不理解你的解决方案,非常抱歉。请注意,持续时间的格式是
[hh]:mm:ss
。我不认为这已经被写下来了,我必须使用
range.getNumberFormat()
它是谷歌电子表格中的源代码。现在我使用的是公式(=A4-A3),而不是此解决方案中的源代码。我的公式仍然减去两个日期时间,但最初我使用
hh:mm:ss
格式化输出单元格,只要差值小于一天就可以了。我必须弄清楚,一旦差异超过一天,如何显示持续时间。我希望谷歌只记录
Range::setNumberFormat()
。。。
function test() {
  var sh = SpreadsheetApp.getActiveSheet();
  var t1 = sh.getRange('a1').getValue().getTime();
  var t2 = sh.getRange('b1').getValue().getTime();
  sh.getRange('c1').setValue(msToTime(t1-t2)).setNumberFormat('hh:mm:ss');

}

function msToTime(s) {
  var ms = s % 1000;
  s = (s - ms) / 1000;
  var secs = s % 60;
  s = (s - secs) / 60;
  var mins = s % 60;
  var hrs = (s - mins) / 60;

  return hrs + ':' + mins + ':' + secs; // milliSecs are not shown but you can use ms if needed
}