Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Google apps script 创建一个包含日期的数组,并在第一个日期和最后一个日期之间添加除星期六和星期日之外的天数_Google Apps Script - Fatal编程技术网

Google apps script 创建一个包含日期的数组,并在第一个日期和最后一个日期之间添加除星期六和星期日之外的天数

Google apps script 创建一个包含日期的数组,并在第一个日期和最后一个日期之间添加除星期六和星期日之外的天数,google-apps-script,Google Apps Script,我知道有些问题看起来与此类似,但我对自己的特殊需要感到困惑 我有一个GoogleSheet列,每行自动导入日期如下(欧洲日期):2020年4月22日、2020年4月23日、2020年4月24日、2020年4月28日。(示例中,一行用逗号分隔)。在另一个专栏中,我用arrayformula函数列出了一周中的某一天: property(文本(B5:B;“DDDD”) 我在谷歌应用程序脚本上的功能是创建一个数组,其中包含与当天名称相关的所有日期 let numberOfDates = currentS

我知道有些问题看起来与此类似,但我对自己的特殊需要感到困惑

我有一个GoogleSheet列,每行自动导入日期如下(欧洲日期):2020年4月22日、2020年4月23日、2020年4月24日、2020年4月28日。(示例中,一行用逗号分隔)。在另一个专栏中,我用arrayformula函数列出了一周中的某一天:

property(文本(B5:B;“DDDD”)

我在谷歌应用程序脚本上的功能是创建一个数组,其中包含与当天名称相关的所有日期

let numberOfDates = currentSheet.getRange(5,1).getValue(); // I have the number of dates written on the Sheet, I just get the value
    let arrayDates = [];
    for (let i=0;i<numberOfDates;i++){
    arrayDates.push([currentSheet.getRange(5+i,2).getValue(),currentSheet.getRange(5+i,3).getValue()]);  
              }
现在我还需要在这个数组中包含2020年4月27日星期一,因为我将创建一个计划。问题是,我不想混淆什么是从什么来源添加的,所以在最后,所有添加的日期我将以红色为例

有时,在源代码处的日期集将超过一个月,我想将除周六和周日之外的所有日期混合在一起

我想这很复杂,但也许你可以给我一个关于如何创建这个数组的解决方案


多谢各位

在开始日期和结束日期之间生成一个日期数组,不包括周六和周日

function dateDayArray(start,end) {
  var start=start||new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate());  
  var end=end||new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate() + Math.floor(Math.random()*100));//Just a random date for testing
  const endv=end.valueOf();
  if(isDate(start) && isDate(end)) {
    var dtA=[];
    let n=0;
    do{
      var cur=new Date(start.getFullYear(),start.getMonth(),start.getDate()+n++);
      if(cur.getDay()>0 && cur.getDay()<6) {
        dtA.push(Utilities.formatDate(cur, Session.getScriptTimeZone(), "MMM dd, yyyy, E"));
      }
    }while(cur.valueOf()<endv);

  }else{
    console.log("Invalid Inputs");
  }
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(JSON.stringify(dtA)), "Display Results");
}

function isDate(date){
  return(Object.prototype.toString.call(date) === '[object Date]');
}
函数dateDayArray(开始、结束){ var start=start | |新日期(新日期().getFullYear(),新日期().getMonth(),新日期().getDate()); var end=end | |新日期(新日期().getFullYear(),新日期().getMonth(),新日期().getDate()+数学地板(数学随机()*100));//只是测试的随机日期 const endv=end.valueOf(); if(isDate(开始)和isDate(结束)){ var dtA=[]; 设n=0; 做{ var cur=新日期(start.getFullYear()、start.getMonth()、start.getDate()+n++);
如果(cur.getDay()>0&&cur.getDay()考虑到您需要第一个和最后一个日期(它们分别是
currentSheet.getRange(5,2).getValue()
currentSheet.getRange(5+numberOfDates-1,2).getValue()
),您可以迭代这两天之间的所有日子,并检查每一天是星期六还是星期天:如果不是这样,请将日期推到
arrayDates

添加天数方法: 要实现这一点,首先应该有一个方法将日期添加到日期中。为此,可以在日期原型中定义以下方法,如中所示:

Date.prototype.addDays=函数(天){
var date=新日期(this.valueOf());
date.setDate(date.getDate()+天);
返回日期;
}
迭代日期: 然后,您可以使用while循环在第一个日期和最后一个日期之间进行迭代(对于每个迭代,比较当前日期和最后一个日期)。对于每个迭代,使用检查是否为工作日:

const days=[“周日”、“周一”、“周二”、“周三”、“周四”、“周五”、“周六”];
const numberOfDates=currentSheet.getRange(5,1).getValue();
设arrayDates=[];
让currentDate=currentSheet.getRange(5,2).getValue();
const lastDate=currentSheet.getRange(5+numberOfDates-1,2).getValue();
while(currentDate 0&¤tDate.getDay()<6){
arrayDates.push([currentDate,days[currentDate.getDay()]);
}
currentDate=currentDate.addDays(1);
}
返回数组日期;

谢谢您的回答。我已尝试测试该函数,但它在Logger上显示了此错误。log:ReferenceError:isDate未定义(第5行)。感谢您的时间。很抱歉,我忘记了我正在使用它。我一到我的计算机就会为您提供。我包括isDate()函数。对于我来说,这看起来是一个值得学习和学习的神奇代码。非常感谢!非常感谢您提供了这个非常清晰的函数,我仍然期待着能够如此清晰地编写代码。我仍然需要做一些工作来使工作成为新方法,因为即使阅读其他源代码,arrayDates也不会在我的控制台上返回任何内容。@Cedric,这很奇怪,这对我有效。你说的
在我的控制台上不返回任何内容是什么意思。
。你说的是什么控制台?你有没有尝试记录
数组日期
function dateDayArray(start,end) {
  var start=start||new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate());  
  var end=end||new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate() + Math.floor(Math.random()*100));//Just a random date for testing
  const endv=end.valueOf();
  if(isDate(start) && isDate(end)) {
    var dtA=[];
    let n=0;
    do{
      var cur=new Date(start.getFullYear(),start.getMonth(),start.getDate()+n++);
      if(cur.getDay()>0 && cur.getDay()<6) {
        dtA.push(Utilities.formatDate(cur, Session.getScriptTimeZone(), "MMM dd, yyyy, E"));
      }
    }while(cur.valueOf()<endv);

  }else{
    console.log("Invalid Inputs");
  }
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(JSON.stringify(dtA)), "Display Results");
}

function isDate(date){
  return(Object.prototype.toString.call(date) === '[object Date]');
}