Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 电子表格和数组之间的日期操作_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

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

Javascript 电子表格和数组之间的日期操作,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我试图创建一个函数来查看日期列表(一年的学校日历),并与用户提示中的日期进行比较,直到在B列中设置了一个字符串(在本例中为“Summer holidays”),前提是B列中没有与单元格对应的其他值 我所拥有的: 如果我在输入中设置9月12日,我期望的是: function setTrimesters(){ 变量表= SpreadsheetApp.getActive().getSheetByName(“calendar2017”); //孕早期开始 变量输入=ui.prompt(“设置妊娠第一天(

我试图创建一个函数来查看日期列表(一年的学校日历),并与用户提示中的日期进行比较,直到在B列中设置了一个字符串(在本例中为“Summer holidays”),前提是B列中没有与单元格对应的其他值

我所拥有的:

如果我在输入中设置9月12日,我期望的是:

function setTrimesters(){
变量表=
SpreadsheetApp.getActive().getSheetByName(“calendar2017”);
//孕早期开始
变量输入=ui.prompt(“设置妊娠第一天(DD/MM)”;
var value=input.getResponseText();
var Allstartendetrimests=[valorInici1rTri]
//获取数据范围
var dataRange=sheet.getRange('A1:B'+sheet.getLastRow());
//获取数据范围值
var data=dataRange.getDisplayValues();
对于(var i=0;i
脚本只使用日期的day值。然后,在10月1日到11日,脚本也指定了值“Summer holidays”

在比较之前,我不知道如何获取日期和月份值。我已尝试将NumberFormat设置为毫秒或天(类似于42895左右)…但电子表格应用程序和应用程序脚本在处理日期时存在一些限制


提前感谢您的帮助

问题在于,您将日期作为字符串处理,因此它们会按字典顺序进行比较。由于第一天,4/9先于5/7,这不是您想要的。我建议


  • 使用
    getValues
    而不是
    getDisplayValues
    。它将检索JavaScript日期对象而不是字符串。然后比较
    感谢您的帮助,我正在将您的解决方案集成到我的结构中,如果它正常工作,我稍后将发布一个答案供共享。再次感谢!
    
    function setTrimesters() {
      var sheet = 
    SpreadsheetApp.getActive().getSheetByName("calendar2017");
    
      // Start of 1st trimester
      var input = ui.prompt("Set first day of trimester (DD/MM)");
      var value = input.getResponseText();
    
      var allStartEndTrimesters = [valorInici1rTri]
    
      // Get dataRange
      var dataRange = sheet.getRange('A1:B'+sheet.getLastRow());
    
      // Get dataRange values
      var data = dataRange.getDisplayValues();
    
      for (var i = 0 ; i < data.length ; i++) {    
        if (data[i][0] < value) {
          if (data[i][1] == '') {
            data[i][1] = "Summer holidays";
          }
        }
      }
      dataRange.setValues(data);     
    }
    
    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
    }