翌月を求める(GAS)

今回のシステム、作業実績の管理表をつくっている。 グループ長があるボタンをクリックすると、グループ内のメンバの翌月の作業実績入力表(月次のスプレッドシート)を作るようになっている。 その部分は、とっくに出来上がっていて、てか、この前のバグのところ。 きょう、翌月のシートを作ってみると、2月ではなくて3月のシートが出来る。 をいをい、翌月は2月じゃないのかい?とつっこんでみても、3月が出来てしまう。 このまえは、上手く(色は違うがちゃんと翌月が出来ていた)いってたのに、なんでだろう? コードは、Date()関数で、今日の日付をnewして、getMonth関数で、今日の月をゲットして、その月に1を足して、setMonth関数で月をセットしている。 デバッグしてみると、月を+1して書き戻すと、それまで1月だったのが3月になっている。 どうも、単純に月を+1する訳ではなく、今日に30日だか31日だかを足しているよう。 なるほど。 ということは、今日じゃなくて、今月の1日にしてから1(月)を足してやれば上手く行くんじゃないかと思い修正すると、ちゃんと翌月になった。 ボク的には、違う気(日付に関係なく単純に月を+1するのが正しい)がするけど、まあ、世間とボクの考えが違うことはよくあることなので、仕方ない。 というわけで、コードを記しておく。

ダメなコード let date = new Date(); let month = date.getMonth(); // 今日の月を得る month = month + 1; date.setMonth(month); // 翌月にならないこともある 上手く行くコード let date = new Date(); date.setDate(1); // きょうではなく今月の1日にする let month = date.getMonth(); month = month + 1; date.setMonth(month); // 翌月になる

--
はれ

No comments: