我有一个单元格,其值类型为duration, 我将值设置为00:10:00,这是10分钟, 当我将单元格的格式更改为数字时,它将显示0.01。
如何以编程方式使用应用程序脚本获得等同于使用应用程序脚本代码的十进制数?
00:10:00是0.01 10:00:00是0.42
用于转换此持续时间字符串的计算是什么?
答案 0 :(得分:1)
这个答案怎么样?
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
}