Google apps script 计算Google应用程序脚本中两个格式化时间字段之间的持续时间差

Google apps script 计算Google应用程序脚本中两个格式化时间字段之间的持续时间差,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,我一直在尝试获取两个格式化时间列“开始时间”和“结束时间”之间的持续时间。谷歌应用程序脚本的新手。请指导我如何做到这一点 var a = e.source.getActiveSheet().getRange(row,7).getValue() var b = e.source.getActiveSheet().getRange(row,8).getValue() var c = (b-a).getTime(); e.source.getActiveSheet().getRange(row,9).

我一直在尝试获取两个格式化时间列“开始时间”和“结束时间”之间的持续时间。谷歌应用程序脚本的新手。请指导我如何做到这一点

var a = e.source.getActiveSheet().getRange(row,7).getValue()
var b = e.source.getActiveSheet().getRange(row,8).getValue()
var c = (b-a).getTime();
e.source.getActiveSheet().getRange(row,9).setValue(c);

您需要知道的第一件事是工作表和应用程序脚本如何解释日期格式。谷歌在其产品上使用,因此从1970年1月1日UTC 00:00:00开始。未指定日期意味着工作表将09:00:00解释为Sat Dec 30 17:09:21 GMT+00:09 1899

在您的情况下,由于您正在推断日期,所以这不会有太大的区别,但我建议您将日期写为2020年5月30日09:00:00,然后转到格式>数字>时间

关于应用程序脚本,将其解释为类似于Mon-Dec 30 18:00:00 GMT+02:00 2020,这是没有用的。使用Javascript方法将其格式化为日期对象。然后,您可以使用getTime以毫秒为单位获取它这里的所有内容都以毫秒为单位:

一旦两个时间值都以毫秒为单位,就可以使用它们进行操作。您必须将它们转换为小时1毫秒=3.6e+6小时:

var a = e.source.getActiveSheet().getRange(row,7).getValue()
var b = e.source.getActiveSheet().getRange(row,8).getValue()

var a1 = new Date(a).getTime(); //Time in milliseconds
var b1 = new Date(b).getTime(); //Time in milliseconds

var hours = (b1 - a1) / 3.6e+6;

e.source.getActiveSheet().getRange(row,9).setValue(hours);
这在几分钟内不会奏效。1小时30分钟为1.5小时

函数的解决方案:

使用工作表公式来计算脚本,而不是应用程序脚本。它和设置一样简单,例如C1,to=B1-A1


要清楚的是,这是作为脚本的一部分需要做的事情?你不想让一个公式在一张纸上做这件事吗?