问题描述
我正在尝试在 Google 表格的脚本编辑器中使用此代码插入今天的日期以及一致的文本,并且在 2021 年 1 月 31 日之前一直运行良好,当时它开始插入 2021-02-32 、2021-02-33 等,而不是 2021-02-01、2021-02-02 等。这是我正在运行的代码:
function daily() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Social Tracker");
var date = Utilities.formatDate(new Date(),"GMT","YYYY-MM-DD");
var aValues = sh.getRange("A1:A").getValues();
var aLast = aValues.filter(String).length;
// Assuming A and B have same last row,no need for B
// If different,need to calculate separately
var bValues = sh.getRange("B1:B").getValues();
var bLast = bValues.filter(String).length;
// If A and B are the same,use setValues
sh.getRange(aLast + 1,1,2).setValues([[date,'handle']]);
var sheet = SpreadsheetApp.getActiveSheet();
var followers = sheet.getRange(2,5,sheet.getLastRow()).getValues();
var nextRowJ = getFirstemptyRow('J');
var following = sheet.getRange(2,6,sheet.getLastRow()).getValues();
var nextRowK = getFirstemptyRow('K');
var engagement = sheet.getRange(2,7,sheet.getLastRow()).getValues();
var nextRowL = getFirstemptyRow('L');
var likes = sheet.getRange(2,8,sheet.getLastRow()).getValues();
var nextRowM = getFirstemptyRow('M');
var comments = sheet.getRange(2,9,sheet.getLastRow()).getValues();
var nextRowN = getFirstemptyRow('N');
var posts = sheet.getRange(2,4,sheet.getLastRow()).getValues();
var nextRowO = getFirstemptyRow('O');
// Record current balance and timestamp at end of columns B & C
sheet.getRange(nextRowO,15,1).setValues([[posts]]);
sheet.getRange(nextRowJ,10,1).setValues([[followers]]);
sheet.getRange(nextRowK,11,1).setValues([[following]]);
sheet.getRange(nextRowL,12,1).setValues([[engagement]]);
sheet.getRange(nextRowM,13,1).setValues([[likes]]);
sheet.getRange(nextRowN,14,1).setValues([[comments]]);
}
// From https://stackoverflow.com/a/9102463/1677912
function getFirstemptyRow(columnLetter) {
columnLetter = columnLetter || 'A';
var rangeA1 = columnLetter + ':' + columnLetter;
var spr = SpreadsheetApp.getActiveSpreadsheet();
var column = spr.getRange(rangeA1);
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct][0] != "" ) {
ct++;
}
这是 cells that are being filled in by the script 的图像。我假设我的问题与这条线有关: sh.getRange(aLast + 1,2).setValues([[日期,'一致的文本']]);
我如何调整它以确保它遵循 A1 中的下一个日期,即。插入 2021-02-01 而不是 2021-02-32?
解决方法
使用:
var date = Utilities.formatDate(new Date(),"GMT","yyyy-MM-dd");
原因:
Utilities.formatDate(date,timeZone,format) 跟随此 format guidelines
当您使用 "DD"
时,您指定一年中的哪一天。如果要指定月份中的日期,则需要使用 dd
此外,当您使用 "YYYY"
时,您指的是一周年。如果您想获得实际年份,请改用 "yyyy"
。
如果您发现使用 Java SE Simple Date Format 违反直觉,并且您使用的是 Google Apps Script V8 运行时而不是使用 Utilities.formatdate()
,那么您可能习惯于 Date.prototype.toLocaleDateString
使用 "YYYY-MM-DD"
代替 "yyyy-MM-dd"
-
YYYY
代表 4 位数的弱年份(一年的第一周/最后一周,它可能返回与您预期不同的数字。 -
yyyy
代表 4 位数年份 -
DD
代表日年(32 是 2 月 1 日) -
MM
代表 2 位数月份(02 是二月) -
mm
2 位数分钟的统计数据