问题描述
我对编码和尝试为小型组织自动化流程是全新的。员工每天填写一张表格。我正在尝试编写一个脚本,我可以每天早上运行该脚本,该脚本将从不是今天的日期中删除任何回复,并将它们存档在单独的选项卡中。
关键问题是我似乎无法弄清楚如何编写代码,以便:
新日期(); === [表单响应表中的 DATE 值]
当它们是同一天时返回 TRUE。
这些是我正在使用的变量:
var today = new Date();
var todayNoTime = today.setHours(0,0); // 这是对目前无效的修复的尝试
var daterange =comingSheet.getRange(1,1,incomingSheet.getLastRow(),1).getValues(); // 这些都是表单提交的时间戳
然后为了测试我是否已经弄清楚我正在使用以下 for 循环:
for (i=0;i Logger.log((daterange[i],1)); if (daterange[i][1]===todayNoTime){Logger.log("row" + i +
"匹配今天的日期")}else{Logger.log("row " + i + " 不匹配
今天的日期")} 我尝试在每个日期范围内使用 .setHours(0,0) 例如。 daterange[i][1].setHours(0,0);但这不起作用。 我尝试使用 Utilities.formatDate 来匹配 "var today;"到“var daterange;”但时间仍然是个问题。 我在我的工作表中添加了一列,使用 INT() 函数将时间戳日期转换为 google 的 5 位日期值之一,但我不知道如何转换“var today;”自动转换为这 5 位代码之一,以便它每天都可以使用。 任何帮助或想法将不胜感激。
解决方法
如果第一列中的日期早于 n 天,这将删除数据行。它假定日期在 A 列中并且只有一个标题行并且数据从第 2 行开始
function deleteDatesOlderthanNday(n = 15) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');
const [hA,...vs] = sh.getDataRange().getValues();
const dt = new Date();
const threshold = new Date(dt.getFullYear(),dt.getMonth(),dt.getDate() - n).valueOf();//return milliseconds for midnight n days ago
let d = 0;
//entry date is assumed to be in column one or A
vs.forEach((r,i) => {
if (new Date(r[0]).valueOf() < threshold) {
sh.deleteRow(i + 2 - d++);//delete rows that are older than n days
}
});
}