繁体   English   中英

计算 Google App Scripts 中 2 个格式化时间字段之间的持续时间差异

[英]Calculate the duration difference between 2 formatted time fields in Google App Scripts

我一直在尝试获取 2 个格式化时间列(开始时间和结束时间)之间的持续时间。 使用 Google 应用脚本的新手。 请指导我如何实现这一目标。

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

这是附在谷歌表上的图片

您需要了解的第一件事是表格和 Apps 脚本如何解释日期格式。 Google 在其产品上使用Unix 时间,因此它从00:00:00 UTC on 1 January 1970开始。 未指定日期意味着表格将09:00:00解释为Sat Dec 30 17:09:21 GMT+00:09 1899

在您的情况下,由于您要推断日期,因此不会有太大的不同,但是我建议您将它们30/05/2020 09:00:00 ,然后将 go 写成Format > Number > Time

关于 Apps Script, getValues会将其解释为类似于Mon Dec 30 18:00:00 GMT+02:00 2020的内容,这是没有用的。 使用Date Javascript 方法将其格式化为 Date object。 然后您可以使用 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 小时。


函数解决方案:

使用表格公式代替 Apps 脚本来计算它。 就像将例如 C1 设置为=B1-A1一样简单;

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM