google-apps-script - 谷歌应用脚本帮助调用两个定时事件之间的差异
问题描述
我正在尝试为我的中学创建一个脚本,允许学生在离开教室时退出并登录。我相信我的大部分代码都正确编码,除了确定两次之间的差异。每次执行脚本时,我都会返回一个时间,但它总是比它应该的值增加。
示例: 2021 年 11 月 16 日 07:22:25 P 出发 2021 年 11 月 16 日 07:25:18 P 返回时间 0.05
示例:2021 年 11 月 16 日 07:24:59 P 出发 2021 年 11 月 16 日返回 07:38:16 P 时间过去 0.22
无论如何,我都不是经验丰富的编码员,所以我确信我的程序中遗漏了一些东西。任何帮助是极大的赞赏。
[![在此处输入图像描述][1]][1]
//DEFINE ALL ACTIVE SHEETS
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MAIN SHEET
var mainSheet = ss.getSheetByName("DATASHEET");
//LAST ROW ON MAIN SHEET
var lastRow = mainSheet.getLastRow();
for (var j = 5; j <= lastRow; j++)
{
// CHECK CLOCK IN
if(mainSheet.getRange('B1:B1').getValue() == mainSheet.getRange(j, 1).getValue() && mainSheet.getRange(j,3).getValue() == '')
{
Browser.msgBox('Need to Clock Out before Clocking IN');
return;
}
}
// ADD CLOCK IN RECORD
mainSheet.getRange(lastRow+1,1).setValue(mainSheet.getRange('B1:B1').getValue()).setFontSize(12);
mainSheet.getRange(lastRow+1,2).setValue(new Date()).setNumberFormat("MM/dd/yyyy hh:mm:ss A/P").setHorizontalAlignment("left").setFontSize(12);
if (mainSheet.getRange('B1:B1').getValue() == mainSheet.getRange('B1:B1').getValue() && mainSheet.getRange(j,3).getValue() == '')
{
Browser.msgBox('Your Time is Recorded, \n Please Remember to Sign Back In When You Return');
return;
}
}
function clockOut() {
//DEFINE ALL ACTIVE SHEETS
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MAIN SHEET
var mainSheet = ss.getSheetByName("DATASHEET");
//LAST ROW ON MAIN SHEET
var lastRow = mainSheet.getLastRow();
var foundRecord = false;
for (var j = 5; j <= lastRow; j++)
{
// FIND CLOCK IN RECORD
if(mainSheet.getRange('B1:B1').getValue() == mainSheet.getRange(j, 1).getValue() && mainSheet.getRange(j,3).getValue() == '')
{
// UPDATE CLOCK IN RECORD
mainSheet.getRange(j,3).setValue(new Date()).setNumberFormat("MM/dd/yyyy hh:mm:ss A/P").setHorizontalAlignment("left").setFontSize(12);
var totalTime = (mainSheet.getRange(j,3).getValue() - mainSheet.getRange(j,2).getValue()) /(60*60*1000);
mainSheet.getRange(j,4).setValue(totalTime.toFixed(2)).setNumberFormat("#0.00").setHorizontalAlignment("left").setFontSize(12);
foundRecord = true;
}
}
// IF NO CLOCK IN RECORD
if(foundRecord == false)
{
Browser.msgBox('Need to Clock In First');
return;
}
// CALL TOTAL HOURS
TotalHours();
}
function TotalHours()
{
//DEFINE ALL ACTIVE SHEETS
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MAIN SHEET
var mainSheet = ss.getSheetByName("DATASHEET");
//LAST ROW ON MAIN SHEET
var lastRow = mainSheet.getLastRow();
//DEFINE ARRAY
var totals = [];
//LOOP THROUGH ALL RATES
for (var j = 5; j <= lastRow; j++)
{
var rate = mainSheet.getRange(j, 4).getValue();
var name = mainSheet.getRange(j, 1).getValue();
var foundRecord = false;
for(var i = 0; i < totals.length; i++)
{
//FOUND RECORD ADD TO TOTAL
if(name == totals[i][0] && rate != '')
{
totals[i][2] = totals[i][2] + rate;
foundRecord = true;
}
}
//ADD NEW RECORD, EXISTING RECORD NOT FOUND
if(foundRecord == false && rate != '')
{
totals.push([name, rate]);
}
}
//CLEAR DATA
mainSheet.getRange("F5:G1000").clear();
//DISPLAY TOTALS
for(var i = 0; i < totals.length; i++)
{
mainSheet.getRange(5+i,6).setValue(totals[i][0]).setFontSize(12);
mainSheet.getRange(5+i,7).setValue(totals[i][2]).setFontSize(12);
}
}```
[1]: https://i.stack.imgur.com/xJBj7.png
解决方案
在您的脚本中,如何进行以下修改?clockOut()
请按如下方式修改函数。
从:
var totalTime = (mainSheet.getRange(j,3).getValue() - mainSheet.getRange(j,2).getValue()) /(60*60*1000);
至:
var totalTime = (mainSheet.getRange(j, 3).getValue() - mainSheet.getRange(j, 2).getValue()) / (60 * 1000 * 100);
或者
var totalTime = (mainSheet.getRange(j, 3).getValue().getTime() - mainSheet.getRange(j, 2).getValue().getTime()) / (60 * 1000 * 100);
推荐阅读
- angular - 贝宝集成中的 ExpressionChangedAfterItHasBeenCheckedError
- sass - 如何从 SASS 中的字符串中修剪空格?
- c++ - 如何将具有 const noexcept 的虚函数从 c++11 转换为 c++17?
- python - 无法删除某些列表元素
- java - 通过单元测试中的字段“userService”表示不满足的依赖关系
- bash - Azure DevOps 通过 curl 或获取任务输出值作为新变量
- css - bootstrap-图像未与顶部对齐
- node.js - dexie 在导出和导入时使用过滤器 (dexie-export-import)
- c - gcc/clang 对局部变量和结构字段使用限制关键字
- laravel - 如何在 laravel 工作中优先考虑?