电子表格和数组之间的日期操作

时间:2017-07-18 14:29:49

标签: javascript google-apps-script google-sheets

我正在尝试查看日期列表(一年校历),并与用户提示中的日期进行比较,直到日期(所有天数“低于”用户)日期)在B列中设置一个字符串(在本例中为“暑假”,只有如果,则在B列中没有与单元格对应的其他值。

我有什么:this is the table as seen before action

我期待的是,如果我在输入中设置9月12日:enter image description here

JS

该脚本仅使用日期的 。然后,在10月,从1日到11日,剧本也分配了“暑假”的价值。

我不知道在比较之前如何获得一天月份值。我已经尝试将setNumberFormat设置为毫秒或几天(类似于42895左右)......但是SpreadsheetApp和App Scripts使用日期有一些限制。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

问题是您使用日期作为字符串,因此它们按字典顺序进行比较。白天是第一天,4/9在5/7之前,这不是你想要的。我建议

  • 使用getValues代替getDisplayValues。它将检索JavaScript日期对象而不是字符串。然后比较<正常工作,但您还需要开始日期为Date对象:见下文。
  • 不要覆盖A列中的输入数据。单独的输入和输出范围。

这是一个示例,删除了用户界面部分:

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
}