Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GoogleSheets脚本根据时间戳和列值删除行。为什么一个有效而另一个无效?_Javascript_Date_Datetime_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript GoogleSheets脚本根据时间戳和列值删除行。为什么一个有效而另一个无效?

Javascript GoogleSheets脚本根据时间戳和列值删除行。为什么一个有效而另一个无效?,javascript,date,datetime,google-apps-script,google-sheets,Javascript,Date,Datetime,Google Apps Script,Google Sheets,我有两个函数在午夜谷歌表单上的触发器上运行。其中一个,Delete60()根据列a中的时间戳删除60天后的所有行。另一个,Delete30()如果列D中的值为“Books”,则应在30天后提前删除行 由于某些原因,Delete60()函数的工作原理与预期完全相同,因此在午夜之后,它会删除60天以前的任何行。但是Delete30()函数的运行时间似乎晚了一天-它大约在同一时间(午夜之后)运行,并根据D列正确删除,但只删除31天以前的行。任何30天大的东西都会留下来。我错过什么了吗?除了天数和对D列

我有两个函数在午夜谷歌表单上的触发器上运行。其中一个,
Delete60()
根据列a中的时间戳删除60天后的所有行。另一个,
Delete30()
如果列D中的值为“Books”,则应在30天后提前删除行

由于某些原因,
Delete60()
函数的工作原理与预期完全相同,因此在午夜之后,它会删除60天以前的任何行。但是
Delete30()
函数的运行时间似乎晚了一天-它大约在同一时间(午夜之后)运行,并根据D列正确删除,但只删除31天以前的行。任何30天大的东西都会留下来。我错过什么了吗?除了天数和对D列的值进行额外检查外,代码似乎是相同的。进行额外检查是否会影响时间安排

function Delete60() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Request Info");//applies to active requests only
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array
  
var currentDate = new Date();//today
var monthOld = Date.now() + -60*24*3600*1000; 
for (i=lastrow;i>=1;i--) {
var tempDate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col1 = [0]
if ((tempDate!="") && (tempDate <= (monthOld)))
{
  sheet.deleteRow(i);
}
}
}

function Delete30() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Request Info");//applies to active requests only
var datarange = sheet.getDataRange();
var lastrow = datarange.getLastRow();
var values = datarange.getValues();// get all data in a 2D array
  
var currentDate = new Date();//today
var monthOld = Date.now() + -30*24*3600*1000; 
for (i=lastrow;i>=1;i--) {
var tempDate = values[i-1][0];// arrays are 0 indexed so row1 = values[0] and col1 = [0]
var bookCheck = values[i-1][3];// values in column D
if ((tempDate!="") && (tempDate <= (monthOld)) && bookCheck=="Books")
{
  sheet.deleteRow(i);
}
}
}
函数Delete60(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“请求信息”);//仅适用于活动请求
var datarange=sheet.getDataRange();
var lastrow=datarange.getLastRow();
var values=datarange.getValues();//获取二维数组中的所有数据
var currentDate=新日期();//今天
var monthhold=Date.now()+-60*24*3600*1000;
对于(i=lastrow;i>=1;i--){
var tempDate=values[i-1][0];//数组的索引为0,因此row1=values[0]和col1=[0]
如果((tempDate!=“”)和&(tempDate=1;i--){
var tempDate=values[i-1][0];//数组的索引为0,因此row1=values[0]和col1=[0]
var bookCheck=值[i-1][3];//D列中的值
如果((tempDate!=“”)和&(tempDate请尝试以下操作:

function Delete60() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Request Info");
  var rg=sh.getDataRange();
  var values=rg.getValues();
  var cd=new Date();
  var mold=new Date(cd.getFullYear(),cd.getMonth(),cd.getDate()-60).getTime();
  var d=0;
  values.forEach(function(r,i){if(new Date(values[i][0]).getTime()<=mold){sh.deleteRow(i+1-d++)}});
}

function Delete30() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Request Info");
  var rg=sh.getDataRange();
  var values=rg.getValues();
  var cd=new Date();
  var mold=new Date(cd.getFullYear(),cd.getMonth(),cd.getDate()-30).getTime();
  var d=0;
  values.forEach(function(r,i){if(new Date(values[i][0]).getTime()<=mold){sh.deleteRow(i+1-d++)}});
}

function Delete30Equal2Books() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Request Info");
  var rg=sh.getDataRange();
  var values=rg.getValues();
  var cd=new Date();
  var mold=new Date(cd.getFullYear(),cd.getMonth(),cd.getDate()-30).getTime();
  var d=0;
  values.forEach(function(r,i){if(r[3]=="Books"){sh.deleteRow(i+1-d++)}});
}
函数Delete60(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(“请求信息”);
var rg=sh.getDataRange();
var values=rg.getValues();
var cd=新日期();
var mold=新日期(cd.getFullYear(),cd.getMonth(),cd.getDate()-60).getTime();
var d=0;

values.forEach(function(r,i){if(new Date)(values[i][0]).getTime()您是否计算了一个月的天数?某些月份有31天,您是否将其误认为是30天?或者,当您说午夜时,这两个触发器究竟何时运行?是的,例如,昨晚Delete60()函数删除了8月19日之前的所有内容(60天前)但从9月18日(30天前)至今仍有几个“Books”条目。我一直在跟踪它,自从我开始编写脚本以来也有相同的行为。这两个触发器都是时间驱动的,设置为从午夜运行到凌晨1点。昨晚Delete30()在凌晨12:18:44运行,Delete60()在凌晨12:19:51运行。也许它们不是“Books”?检查D列中字符串末尾是否有空格?另外,如果它在12:18:44 AM运行,则仍然不考虑12:18:4
3
AM的day30(零设置时间日期也是)。太好了,如果D列中的值正好是“Books”,我如何才能让Delete30()函数删除?