Google脚本如何处理时间和日期。
如果工作表中已将时间值输入到单元格中(2:00、1:30等,表示2小时和1小时30),并且您要遍历各行,将总计相加(因此将得出上述结果)在3:30);您如何告诉Google脚本将它们添加在一起;在提到您所知道的时间时,您是否总是必须使用“新日期({INSERT CELL HERE})”?
我正在尝试获取将所有时间值加起来的代码,如果超过22.5小时(22小时30分钟-不在晚上十点半)可以执行某些操作。
function ValidateForm(Action) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var totalpaidovertime = 0.0;
var totalinlieutime = 0.0;
var totalhours = 0.0; //new Date("January 01, 2019 00:00");
var validatedtotalhours = 0.0;
var validatedinlieuhours = 0.0;
var validatedtotalpaidovertime = 0.0;
var ui = SpreadsheetApp.getUi();
var hoursclaimed = sheet.getRange("F4:F35").getValues();
if(spreadsheet.getActiveSheet().getName()=="Totals"){
Browser.msgBox("Incorrect Sheet For This Action","Please select a users sheet to validate first and try again.",ui.ButtonSet.OK);
}else{
if (Action == "Check Overtime"){
//get totalhours
for (var r=0;r<=hoursclaimed.length;r++){
if (hoursclaimed[r].getValue() !=""){
totalhours+=hoursclaimed[r];
}
}
Logger.log(sheet.getRange("f4").getValue()
//calculate totalpaidovertime variable - 22.5 is 3 days of 7.5 work day.
if(totalhours > 22.5) {
totalpaidovertime = 22.5;
}
else {
totalpaidovertime = totalhours;
}
//calculate totalinlieutime variable
if(totalhours > 22.5) {
totalinlieutime = totalhours - 22.5;
}
else {
totalinlieutime = 0.0;
}
if (totalhours > 22.5) {
Browser.msgBox("Total number of hours equals " + totalhours + " hours. Only 22.5 hours (3 days) will be added to Paid Overtime.");
}
答案 0 :(得分:1)
将持续时间从电子表格传递到Google Apps脚本上的服务器端代码很麻烦,因为Google表格和Google Apps脚本/ JavaScript使用不同的纪元。好消息是,我们可以使用getDisplayValue()
和getDisplayValues()
在几种情况下,使获取持续时间成为文本值变得更容易,然后将时间的每个部分首先解析为文本,然后将其转换为数字。 / p>
答案 1 :(得分:1)
没有实现您想要的目标的特定方法,但是您可以使用displayValues函数[1]以字符串形式获取值并对其进行处理以实现您的宏伟目标。
这是我成功制作并测试成功的示例实现,您只需更改代码的这两部分即可:
1)要获取数组数组,每个数组都将字符串作为唯一值,如果单元格为空,则为空: var hoursclaimed = sheet.getRange(“ F4:F35”)。getDisplayValues();
2)在这种情况下,当单元格为空时,它将返回一个未定义的对象,因此为了避免空单元格,我使用了isArray()函数。然后,您将获得字符串并使用substring函数对其进行操作,以获取分钟和小时,将其转换为数字并使用它们。
for (var r=0;r<=hoursclaimed.length;r++){
var valueArray = hoursclaimed[r];
if (Array.isArray(valueArray)){
var str = valueArray[0];
var minutes = Number(str.substring(str.length - 2, str.length));
var hours = Number(str.substring(0, str.length - 3));
totalhours+=(minutes/60) + hours;
}
}
其他解决方案:
您还可以像现在一样使用getValues()函数(它将获取日期数组),然后使用javascript函数“ getHours”和“ getMinutes”,而不是操作字符串:
var minutes = date.getMinutes();
var hours = date.getHours();
[1] https://developers.google.com/apps-script/reference/spreadsheet/range#getDisplayValues()