今回のシステム、作業実績の管理表をつくっている。
グループ長があるボタンをクリックすると、グループ内のメンバの翌月の作業実績入力表(月次のスプレッドシート)を作るようになっている。
その部分は、とっくに出来上がっていて、てか、この前のバグのところ。
きょう、翌月のシートを作ってみると、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:
Post a Comment