Возвращение дат в форматированном формате (итерация) - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь создать вкладки, каждая из которых называется датой начала каждой недели в году.Итак, «01 января», затем «8 января», затем «14 января» и т. Д.

По существу, берём х дату, затем добавляем +7 дней и возвращаем это значение как дату 7 дней от х даты.

function CreateWeekTabs(){
  var TotalsSheet = spreadsheet.getSheetByName("Totals");
  var StartingWeek = new Date(TotalsSheet.getRange("B1").getValue());  //Typically always "Jan 01" shwon. Cell Formatting is MMM DD.   Cell Value is 01/01/2019
  var CurrentWeek = new Date();
  var NextWeek = new Date();
  spreadsheet.toast("Please wait...","Creating Tabs");
  
  for (var WeekNum = 1;WeekNum <= 2;WeekNum++){ 
    
  var DayIncrease = 7 - (7 * WeekNum);   //Should produce 0,7,14,21,28.... So first iteration won't increase any value from Jan 01.
    
    CurrentWeek.setDate(StartingWeek.getDate()+DayIncrease); //E.g. First Iteration = Jan 01 + 0 = Jan 01; Second Iteration = Jan 01 + 7 = Jan 08;
    NextWeek.setDate(CurrentWeek.getDate()+7);   //Should be +7 days from CurrentWeek Value.
    

    var WeekSheetName = Utilities.formatDate(NextWeek,spreadsheet.getSpreadsheetTimeZone(),"MMM DD"); //Should return the date formatted.
   
    Logger.log(WeekNum+" -   "+WeekSheetName);
  }
}  

Для каждой итерации я намерен создавать рабочие таблицы с первой датой каждой недели, начиная со значения CurrentWeek

Например: 01 января, 8 января,15 января, 22 января, 29 января, 05 февраля и т. Д. *

ОБНОВЛЕНИЕ:

С тех пор я изменил код на:

function CreateWeekTabs(){
  var TotalsSheet = spreadsheet.getSheetByName("Totals");
  var CurrentWeek = new Date(TotalsSheet.getRange("B1").getValue());  //Typically always "Jan 01" shown. Cell Formatting is MMM dd.   Cell Value is 01/01/2019
//  var CurrentWeek = new Date();
  var NextWeek = new Date();
  spreadsheet.toast("Please wait...","Creating Tabs");
  
  for (var WeekNum = 1;WeekNum <= 12;WeekNum++){ 
    
  var DayIncrease = (7 * WeekNum) - 7;   //Should produce 0,7,14,21,28.... So first iteration won't increase any value from Jan 01.
    
    CurrentWeek.setDate(CurrentWeek.getDate()+DayIncrease); //E.g. First Iteration = Jan 01 + 0 = Jan 01; Second Iteration = Jan 01 + 7 = Jan 08;
    NextWeek.setDate(CurrentWeek.getDate()+DayIncrease+7);   //Should be +7 days from CurrentWeek Value.
    

    var WeekSheetName = Utilities.formatDate(NextWeek,spreadsheet.getSpreadsheetTimeZone(),"MMM dd"); //Should return the date formatted.
    Logger.log("Week Number: "+WeekNum+" -  Current Week: "+Utilities.formatDate(CurrentWeek,spreadsheet.getSpreadsheetTimeZone(),"MMM dd")+"    Next Week: "+WeekSheetName);
  }
}

и журнал выдает следующее в качестве выходных данных.(так что я вижу, что он производит для переменных CurrentWeek и NextWeek

[19-06-14 14:40:00:463 EDT] Week Number: 1 -  Current Week: Jan 01    Next Week: Jun 08
[19-06-14 14:40:00:464 EDT] Week Number: 2 -  Current Week: Jan 08    Next Week: Jun 22
[19-06-14 14:40:00:464 EDT] Week Number: 3 -  Current Week: Jan 22    Next Week: Jul 13
[19-06-14 14:40:00:465 EDT] Week Number: 4 -  Current Week: Feb 12    Next Week: Aug 09
[19-06-14 14:40:00:466 EDT] Week Number: 5 -  Current Week: Mar 12    Next Week: Sep 16
[19-06-14 14:40:00:467 EDT] Week Number: 6 -  Current Week: Apr 16    Next Week: Oct 28
[19-06-14 14:40:00:468 EDT] Week Number: 7 -  Current Week: May 28    Next Week: Dec 16
[19-06-14 14:40:00:468 EDT] Week Number: 8 -  Current Week: Jul 16    Next Week: Feb 10
[19-06-14 14:40:00:469 EDT] Week Number: 9 -  Current Week: Sep 10    Next Week: Apr 13
[19-06-14 14:40:00:470 EDT] Week Number: 10 -  Current Week: Nov 12    Next Week: Jun 21
[19-06-14 14:40:00:471 EDT] Week Number: 11 -  Current Week: Jan 21    Next Week: Sep 06
[19-06-14 14:40:00:471 EDT] Week Number: 12 -  Current Week: Apr 07    Next Week: Nov 30

Почему горит?Текущее значение рассчитывается правильно, но значение «Следующая неделя» далеко, оно должно показывать +7 дней с текущей недели.

1 Ответ

1 голос
/ 13 июня 2019

Попробуйте:

Первое вычисляет название вкладки начала недели для этой недели.Вы можете выбрать начало дня недели. Вс-Сб - 0-6.Вторая вычисляет название вкладки начала недели для следующей недели.

function thisWeeksStartOfWeekTabname(sow){
  var sow=sow || 1;//Sun-0, Sat=6
  var ss=SpreadsheetApp.getActive();
  var dt=new Date();
  while(dt.getDay()>0) {
    dt=new Date(dt.setDate(dt.getDate()-1));
  }
  dt=new Date(dt.setDate(dt.getDate()+sow));
  Logger.log(Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMM dd"));
  return Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMM dd");
}  

function nextWeeksStartOfWeekTabname(sow){
  var sow=sow || 1;//Sun-0, Sat=6
  var ss=SpreadsheetApp.getActive();
  var dt=new Date();
  while(dt.getDay()>0) {
    dt=new Date(dt.setDate(dt.getDate()+1));
  }
  dt=new Date(dt.setDate(dt.getDate()+sow));
  Logger.log(Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMM dd"));
  return Utilities.formatDate(dt, Session.getScriptTimeZone(), "MMM dd");
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...