首页 > 解决方案 > 创建一个包含日期的数组,并在第一个日期和最后一个日期之间添加天数,周六和周日除外

问题描述

我知道有些问题看起来与此类似,但我正在为我所拥有的特定必要性而摸不着头脑。

我有一个 GoogleSheet 列,每一行都有这样的自动导入日期(欧洲日期)​​:22/04/2020、23/04/2020、24/04/2020、28/04/2020。(例如,一行以逗号分隔)。在另一列中,我有一个带有 arrayformula 函数的星期几:

PROPER(TEXT(B5:B;"DDDD"))

我在 Google App Script 上的功能是创建一个数组,其中包含与当天名称相关的所有日期

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()]);  
              }

如果我在数组上执行 Logger.log,这是它将返回的值的类型

[[Wed Apr 22 00:00:00 GMT+02:00 2020, Wednesday], [Thu Apr 23 00:00:00 GMT+02:00 2020, Thursday], [Fri Apr 24 00:00:00 GMT+02:00 2020, Friday], [Tue Apr 28 00:00:00 GMT+02:00 2020, Tuesday]]

现在,我还需要在此数组中设置 2020 年 4 月 27 日星期一,因为我要创建一个计划。问题是我不想混淆从什么来源添加的内容,所以最后,所有添加的日期我都会用红色表示。

有时,源的日期集将超过一个月,我希望将除周六和周日之外的所有日期混合在一起。

我想这很复杂,但也许你可以用一个关于如何创建这个 Array 的解决方案来打动我?

非常感谢 !

标签: google-apps-script

解决方案


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

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]');
}

JavaScript 日期类


推荐阅读