我有一个具有类型持续时间值的单元格,我已将值设置为00:10:00,这是10分钟,当我将单元格的格式更改为数字时,它将显示0.01。
我将如何以编程方式使用应用脚本代码的十进制等效的应用程序脚本?
00:10:00是0.01 10:00:00是0.42
用于转换此持续时间字符串的计算是什么?
这个答案怎么样?
0.01
和0.42
的值是序列号。但在这种情况下,当看到每个细胞时,0.01
和0.42
是0.00694444444444444
和0.416666666666667
。你也可以确认一下。
如果您想分别将0.00694444444444444
和0.416666666666667
转换为00:10:00
和10:00:00
,请执行以下操作。
00:10:00
和10:00:00
之类的值。var serialNumbers = [0.00694444444444444, 0.416666666666667];
for (var i = 0; i < serialNumbers.length; i++) {
var unixTime = (serialNumbers[i] - 25569) * 86400 * 1000; // Reference: https://stackoverflow.com/a/6154953
var dateObject = new Date(unixTime);
var value = dateObject.toISOString().split("T")[1].split(".")[0];
console.log(value); // 00:10:00 and 10:00:00
}
如果这不是你想要的结果,我道歉。
当像"00:10:00", "10:00:00"
这样的字符串被转换为序列号时,下面的脚本怎么样?在此脚本中,流程如下。
0.006944444445252884
和0.4166666666678793
。var durations = ["00:10:00", "10:00:00"];
for (var i = 0; i < durations.length; i++) {
var ISO8601 = "1899-12-30T" + durations[i] + "Z";
var dateObject = new Date(ISO8601);
var serialNumber = (dateObject.getTime() / 1000 / 86400) + 25569; // Reference: https://stackoverflow.com/a/6154953
console.log(serialNumber); // 0.006944444445252884 and 0.4166666666678793
}
getValues()
检索到的单元格中的值00:10:00
和10:00:00
被放入电子表格的单元格中。getValues()
检索来自上面的细胞的值。我能理解你的其他问题。如果我的理解是正确的,那么这个示例脚本怎么样?
至于这种情况,我认为需要考虑时差。因为getValues()
检索的值已经是具有时差的日期对象。因此,在这种情况下,需要删除此偏移量。
在此示例脚本中,它假设单元格“A1”和“A2”具有00:10:00
和10:00:00
作为持续时间。此示例脚本的流程如下所示。
getValues()
从单元格中检索值。var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:A2").getValues();
var offset = (new Date()).getTimezoneOffset(); // Retrieve the time difference.
for (var i = 0; i < values.length; i++) {
var dateObject = new Date(values[i][0].getTime() - (1000 * 60 * offset));
var serialNumber = (dateObject.getTime() / 1000 / 86400) + 25569; // Reference: https://stackoverflow.com/a/6154953
Logger.log(serialNumber) // 0.006944444445252884 and 0.4166666666678793
}