ushisangyo
@ushisangyo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GASで毎月の月末日を配列で取得したい。

解決したいこと

GASで毎月の月末日を配列で取得しようとしていますが上手くいきません。
ある任意の日付から、別の任意の日付の間の月末日を配列で取得したいのですが、特定の月の月末日だけ取得できずに困っています。(8月と1月の月末が含まれていない。)
どなたかご教授頂けますと幸いです。

該当するソースコード

  const startDate = new Date('2019-05-31'); 
  const endDate = new Date('2022-04-30');
  let dateList = [];

  
  for(let d=startDate; d<=endDate; d.setMonth(d.getMonth()+2),d.setDate(0)){    
    let yyyyMMdd = Utilities.formatDate(d,'JST','yyyyMMdd');
    dateList.push(yyyyMMdd);
  };

  console.log(dateList);

  //ログ結果 

情報	[ '20190531',
  '20190630',
  '20190731',
  '20190930',
  '20191031',
  '20191130',
  '20191231',
  '20200229',
  '20200331',
  '20200430',
  '20200531',
  '20200630',
  '20200731',
  '20200930',
  '20201031',
  '20201130',
  '20201231',
  '20210228',
  '20210331',
  '20210430',
  '20210531',
  '20210630',
  '20210731',
  '20210930',
  '20211031',
  '20211130',
  '20211231',
  '20220228',
  '20220331',
  '20220430' ]



0

1Answer

たとえば d が7月31日のとき、 d.setMonth(d.getMonth()+2) すると9月31日を指そうとしますが、その日は存在しないので10月1日にずれます。さらに d.setDate(0) すると前月末日の9月30日になります。よって8月が飛ばされます。 d が1月31日のときも同様です。

d をまず月初日に変更すれば解決します。 for 文の条件を d.setDate(1), d.setMonth(d.getMonth()+2), d.setDate(0) としてください。

2Like

Comments

  1. @ushisangyo

    Questioner

    なるほど。。。そういう事だったのですね!
    @uasi様、ありがとうございました!!
    無事解決しました!

Your answer might help someone💌