Вот мой недоделанный самопис на jQ:
<style type="text/css">
#calendar table {
margin: auto;
padding: 5px;
background: linear-gradient(#777, #555, #333, #555) #555;
}
#calendar td {
cursor: pointer;
text-align: center;
}
#calendar td:hover {
background: #159;
}
</style>
<div align="center" id="calc_all">
<select id="month" class="button" onchange="$.cookie.set({mon: this.value}); createCalendar();" size="1">
<option value=1>Январь</option>
<option value=2>Февраль</option>
<option value=3>Март</option>
<option value=4>Апрель</option>
<option value=5>Май</option>
<option value=6>Июнь</option>
<option value=7>Июль</option>
<option value=8>Август</option>
<option value=9>Сентябрь</option>
<option value=10>Октябрь</option>
<option value=11>Ноябрь</option>
<option value=12>Декабрь</option>
</select>
<select id="year" class="button" onchange="$.cookie.set({year: this.value}); createCalendar();" size="1"></select>
<br />
<div id="calendar"></div>
</div>
<script>
'use strict';
var akt_year = new Date().getFullYear(),
n_y = 9,
yyyy = akt_year - n_y,
yyyy_f = akt_year + n_y;
while (yyyy++ < yyyy_f) {
$('<option />', { value: yyyy })
.appendTo($('#year'))
.text(yyyy);
}
function createCalendar() {
var $elem = $('#calendar');
$('#month').val(
$.cookie.get('mon') ? $.cookie.get('mon') : +(new Date().getMonth()) + 1
);
$('#year').val ($.cookie.get('year') ? $.cookie.get('year') : akt_year);
var mon = document.getElementById('month').value - 1; // месяцы от 0 до 11
var year = document.getElementById('year').value; //$.cookie.get('year') ||
// alert(year+' '+mon) //2012
var d = new Date(year, mon),
table = '<table id="cal"><tr><th>пн</th><th>вт</th><th>ср</th><th>чт</th><th>пт</th><th>сб</th><th>вс</th></tr><tr>';
//alert(d)
for (var i = 0; i < getDay(d); i++) {
table += '<td></td>';
}
// ячейки календаря с датами
while (d.getMonth() == mon) {
table += '<td>' + d.getDate() + '</td>';
if (getDay(d) % 7 == 6) {
table += '</tr><tr>';
}
d.setDate(d.getDate() + 1);
}
if (getDay(d) != 0) {
for (var i = getDay(d); i < 7; i++) {
table += '<td></td>';
}
}
table += '</tr></table>';
// console.log("table= ", table);
$elem.html (table);
}
function getDay(date) {
var day = date.getDay();
if (day == 0) day = 7;
return day - 1;
}
createCalendar();
</script>
Лежит
здесь, но код на странице относится к делегированию. В исходниках - тот, что привёл выше.
В нём используется
плагин для работы с кукисами.