以格式化的格式返回日期(迭代)

时间:2019-06-13 18:52:27

标签: google-apps-script

我正在尝试创建选项卡,其中每个选项卡名称均为一年中每个星期的开始日期。因此,“ Jan 01”然后“ Jan 08”然后“ Jan 14”等。

本质上,将x日期作为日期,然后加上+7天,然后将该值作为从x日期起7天的日期返回。

import React, {useState, useContext, useEffect} from 'react';
import {withRouter} from 'react-router-dom';
import axios from 'axios';
import {AppContext} from "../context/AppContext";

const LoginPage = (props) => {

    const [name, setName] = useContext(AppContext);
    const [isLoading, setIsLoading] = useState(false);
    const isMounted = useRef(null);

    useEffect(() => {
      // executed when component mounted
      isMounted.current = true;
      return () => {
        // executed when unmount
        isMounted.current = false;
      }
    }, []);

    const onClick = () => {
        setIsLoading(true);
        axios.post('/get-name')
            .then(resp => {
                setName(resp);
                setIsLoading(false);
                props.history.push('/');
            })
            .catch(err => console.log(err))
            .finally(() => {
               if (isMounted.current) {
                 setIsLoading(false)
               }
            });
    };

    return (
        <div>
            <button onClick={onClick}></button>
        </div>
    );
};

export default withRouter(LoginPage);

对于每次迭代,我打算从CurrentWeek的值开始,以每周的第一个日期创建工作表

例如:Jan 01,Jan 08,Jan 15,Jan 22,Jan 29,Feb 05,etc ...

更新:

我此后将代码更改为:

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”和“ NextWeek”产生了什么

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

为什么大火?当前值正在正确计算,但是下周的值相距较远,应该显示距当前周+7天。

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

第一个将计算本周的“周开始”选项卡名称。您可以选择工作日的开始时间,星期日至星期六为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");
}