首页 > 解决方案 > 谷歌应用脚​​本帮助调用两个定时事件之间的差异

问题描述

我正在尝试为我的中学创建一个脚本,允许学生在离开教室时退出并登录。我相信我的大部分代码都正确编码,除了确定两次之间的差异。每次执行脚本时,我都会返回一个时间,但它总是比它应该的值增加。

示例: 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

标签: google-apps-script

解决方案


在您的脚本中,如何进行以下修改?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);

推荐阅读