カレンダーを制するものは、時を司る・・・、ワケないよね〜。下駄です。
本日のIT謎掛け
「date関数」とかけまして・・・
「スポーツの競技中に怪我をした場合」と、ときます。
そのココロは・・・
タイムをとります。
ネットで見かける日付操作の落とし穴
カレンダー機能を作っていた時に、次の月や前の月に、移動するボタンを設置する必要がでてきました。
そして、出来上がった関数は以下のようなプログラムです。
function month_move(y , m , move_month){
var d = new Date(Number(y) , Number(m) -1 , 1);
d.setMonth(d.getMonth() + move_month);
return{
y : d.getFullYear(),
m : d.getMonth() +1
};
};
年と月と、移動する月数を"month_move()"という関数に送ると、結果の年と月が返ってくるという関数です。
month_move(2020,1,+1)
> {y: 2020, m: 2}
month_move(2020,2,+1)
> {y: 2020, m: 3}
month_move(2020,3,+1)
> {y: 2020, m: 4}
month_move(2020,12,+1)
> {y: 2021, m: 1}
month_move(2021,1,+1)
> {y: 2021, m: 2}
month_move(2021,2,+5)
> {y: 2021, m: 7}
month_move(2021,1,-1)
> {y: 2020, m: 12}
正常に取得できますね。
+1dで翌月、-1で前月を取得でき、年またぎもうまくいっています。
もちろん、+1,-1以外にも、数ヶ月先にも対応できています。
ちょっとだけプログラム解説
javascriptには、phpの"strtotime"というような便利な関数は用意されていないので、今回のプログラムでは、"new Date()"関数で、日付オブジェクトを作って、その中で、数カ月後の月にセットをして、その日付オブジェクトから、年と月を取得しています。
さほど難しい要素はないのですが、2行目の、
var d = new Date(Number(y) , Number(m) -1 , 1);
ここで、日付オブジェクトを作成して、います。
ポイントは基準になる年月をセットする点ですね。
この値を入れないと、基準日が今現在になってしまいます。
そして、日は、月初の1日に固定しています。
次に、3行目の箇所が、月移動の処理です。
d.setMonth(d.getMonth() + move_month);
年またぎ処理は、内部で13月という値を渡すと、年も翌年に変換してくれるという、便利ポイントがあるので、非常にありがたい限りです。
0 件のコメント:
コメントを投稿