我创建了一个简单的自定义函数以在Google表格脚本功能中进行测试。函数定义为:
/**
* convert duration such as 1:30 to 1.5
*
* @customfunction
*/
function SIMPLETEST(input) {
// simply return the input for now to test.
return input;
}
,在我的电子表格中,我有一个单元格A2,其值为3:30:00
。例如,当我在B2上应用此功能时,例如将b2设置为:=DURATION_DECIMAL(A2)
,它将返回12/30/1899
,我认为这是基准日期。
为什么会这样?
答案 0 :(得分:1)
这是因为您必须将该单元格的数据类型设置为“自动”或“持续时间”,并且Google表格会猜测“ 3:30:00”是自动/持续时间的日期/时间类型它将其转换为日期/时间以传递给您的函数。它使您可以将其保留为格式(#:##:##),但是当您将其传递给自定义公式时,Sheets会首先将其转换为Javascript Date对象,然后您的函数将其返回,Sheets会自动显示为常规日期(12/30/1899
)。请参阅Google关于使用自定义函数here进行日期转换的警告。
最简单的解决方案是使用格式选择下拉列表将输入格式明确设置为“纯文本”,然后在自定义功能代码中根据需要进行解析。
例如,我使用this StackOverflow答案来编写您的自定义函数:
function DURATION_DECIMALS(input){
// https://stackoverflow.com/a/22820471/11447682
var arr = input.split(':');
var dec = parseInt((arr[1]/6)*10, 10);
return parseFloat(parseInt(arr[0], 10) + '.' + (dec<10?'0':'') + dec);
}
答案 1 :(得分:0)
这对我有用:
function durdechrs(dt) {
return Number((dt.valueOf()-new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf())/3600000).toFixed(2);
}