一度に大量のことを実現しようと詰め込みすぎです。順番に下から固めていきましょう。まずはカレンダーの生成アルゴリズムを理解しましょう。以下はPHPでの例ですが、JavaScriptでもほとんど同じように書けるはずです。
・最もシンプルなカレンダー生成ロジック
その他参考になるページがこちらです。
・JavascriptのDateオブジェクトの月(month)に注意
・【覚書】JavaScriptでDateオブジェクトを使って一ヶ月の日数を得る
・Create a JavaScript array containing 1…N
・Split array into chunks
lang
1Array.prototype.chunk = function(size) {
2 var array = this;
3 return [].concat.apply([], array.map(function(e, i) {
4 return i % size ? [] : [array.slice(i, i + size)];
5 }));
6}
7function range(min, max) {
8 return Array(max - min + 1).join().split(',').map(function(e, i) {
9 return min + i;
10 });
11}
12function calendar(date) {
13 var dt = new Date(date.getYear(), date.getMonth(), 1);
14 var max = new Date(dt.getYear(), dt.getMonth() + 1, 0).getDate();
15 var before = dt.getDay();
16 var after = (7 - (before + max) % 7) % 7;
17 return range(1 - before, max + after)
18 .map(function (e) { return e < 1 || e > max ? '' : e; })
19 .chunk(7);
20}
21var now = new Date;
22var cal_now = calendar(now);
次の月を表示するのであれば、単純に渡すDateオブジェクトに1ヵ月加算すればいいだけです。
lang
1var next = new Date(now.getYear(), now.getMonth() + 1, now.getDate());
2var cal_next = calendar(next);
実際に表示してクリックしたときに反応させるにはイベントハンドラを使います。月の移動に関しては、クリックする要素自体は固定されるので、 .click()
を使えばいいと思います。
・.click()
各日にちに関しては、セルに共通のクラスを割り振っておいて、それに対してイベントハンドラを張ればいいと思います。動的に追加した要素に対しては.click()
は使えないので、.on()
を使う必要があります。
・.on()
実際に情報をサーバ側に保存するには、$.ajax()
を使ってPHP(もしくはnode.js/Python/Rubyなど)のスクリプトにデータを送信する必要があります。
・$.ajax()
・JavaScript(jQuery)からPHPのAPIを利用する
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。