我正在尝试查看日期列表(一年校历),并与用户提示中的日期进行比较,直到日期(所有天数“低于”用户)日期)在B列中设置一个字符串(在本例中为“暑假”,只有如果,则在B列中没有与单元格对应的其他值。
JS
该脚本仅使用日期的日值 。然后,在10月,从1日到11日,剧本也分配了“暑假”的价值。
我不知道在比较之前如何获得一天和月份值。我已经尝试将setNumberFormat设置为毫秒或几天(类似于42895左右)......但是SpreadsheetApp和App Scripts使用日期有一些限制。
提前感谢您的帮助
答案 0 :(得分:2)
问题是您使用日期作为字符串,因此它们按字典顺序进行比较。白天是第一天,4/9在5/7之前,这不是你想要的。我建议
getValues
代替getDisplayValues
。它将检索JavaScript日期对象而不是字符串。然后比较<
正常工作,但您还需要开始日期为Date对象:见下文。这是一个示例,删除了用户界面部分:
function testSummer() {
var sheet = SpreadsheetApp.getActiveSheet();
var userEnteredDate = "26/07"; // what you get from user
var dateParts = userEnteredDate.split("/");
var beginning = new Date();
beginning.setMonth(dateParts[1] - 1, dateParts[0]);
beginning.setHours(0, 0, 0, 0); // so it's 0 hour of the day entered, in the current year
var inputData = sheet.getRange('A1:A'+sheet.getLastRow()).getValues();
var outputRange = sheet.getRange('B1:B'+sheet.getLastRow());
var outputData = outputRange.getValues();
for (var i = 0; i < inputData.length; i++) {
if (inputData[i][0] < beginning && outputData[i][0] == "") {
outputData[i][0] = "summer vacation";
}
}
outputRange.setValues(outputData); // not overwriting input
}