You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.9 KiB
111 lines
3.9 KiB
(function($) {
|
|
|
|
function calendarWidget(el, params) {
|
|
|
|
var now = new Date();
|
|
var thismonth = now.getMonth();
|
|
var thisyear = now.getYear() + 1900;
|
|
var today = now.getDate();
|
|
var opts = {
|
|
month: thismonth,
|
|
year: thisyear,
|
|
today:today
|
|
};
|
|
|
|
$.extend(opts, params);
|
|
|
|
var monthNames = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
|
|
var dayNames = ['日', '一', '二', '三', '四', '五', '六'];
|
|
month = i = parseInt(opts.month);
|
|
year = parseInt(opts.year);
|
|
today = parseInt(opts.today);
|
|
var m = 0;
|
|
var table = '';
|
|
|
|
// next month
|
|
if (month == 11) {
|
|
var next_month = '<a href="?month=' + 1 + '&year=' + (year + 1) + '" title="' + monthNames[0] + ' ' + (year + 1) + '">' + monthNames[0] + ' ' + (year + 1) + '</a>';
|
|
} else {
|
|
var next_month = '<a href="?month=' + (month + 2) + '&year=' + (year) + '" title="' + monthNames[month + 1] + ' ' + (year) + '">' + monthNames[month + 1] + ' ' + (year) + '</a>';
|
|
}
|
|
|
|
// previous month
|
|
if (month == 0) {
|
|
var prev_month = '<a href="?month=' + 12 + '&year=' + (year - 1) + '" title="' + monthNames[11] + ' ' + (year - 1) + '">' + monthNames[11] + ' ' + (year - 1) + '</a>';
|
|
} else {
|
|
var prev_month = '<a href="?month=' + (month) + '&year=' + (year) + '" title="' + monthNames[month - 1] + ' ' + (year) + '">' + monthNames[month - 1] + ' ' + (year) + '</a>';
|
|
}
|
|
|
|
table += ('<h3 id="current-month">'+monthNames[month]+' '+year+'</h3>');
|
|
// uncomment the following lines if you'd like to display calendar month based on 'month' and 'view' paramaters from the URL
|
|
//table += ('<div class="nav-prev">'+ prev_month +'</div>');
|
|
//table += ('<div class="nav-next">'+ next_month +'</div>');
|
|
table += ('<table class="calendar-month " ' +'id="calendar-month'+i+' " cellspacing="0">');
|
|
|
|
table += '<tr>';
|
|
|
|
for (d=0; d<7; d++) {
|
|
table += '<th class="weekday">' + dayNames[d] + '</th>';
|
|
}
|
|
|
|
table += '</tr>';
|
|
|
|
var days = getDaysInMonth(month,year);
|
|
var firstDayDate=new Date(year,month,1);
|
|
var firstDay=firstDayDate.getDay();
|
|
|
|
var prev_days = getDaysInMonth(month,year);
|
|
var firstDayDate=new Date(year,month,1);
|
|
var firstDay=firstDayDate.getDay();
|
|
|
|
var prev_m = month == 0 ? 11 : month-1;
|
|
var prev_y = prev_m == 11 ? year - 1 : year;
|
|
var prev_days = getDaysInMonth(prev_m, prev_y);
|
|
firstDay = (firstDay == 0 && firstDayDate) ? 7 : firstDay;
|
|
|
|
var i = 0;
|
|
for (j=0;j<42;j++){
|
|
|
|
if ((j<firstDay)){
|
|
table += ('<td class="other-month"><span class="day">'+ (prev_days-firstDay+j+1) +'</span></td>');
|
|
} else if ((j>=firstDay+getDaysInMonth(month,year))) {
|
|
i = i+1;
|
|
table += ('<td class="other-month"><span class="day">'+ i +'</span></td>');
|
|
}else{
|
|
// console.log(opts.signDays);
|
|
// console.log($.inArray((j-firstDay+1),opts.signDays))
|
|
if($.inArray((j-firstDay+1),opts.signDays)!=-1){
|
|
//特定days
|
|
table += ('<td class="current-month signed day'+(j-firstDay+1)+'"><span class="day">'+(j-firstDay+1)+'</span></td>');
|
|
}else if(today==(j-firstDay+1) && month==thismonth){
|
|
//今天
|
|
table += ('<td class="current-month today day'+(j-firstDay+1)+'"><span class="day">'+(j-firstDay+1)+'</span></td>');
|
|
}else{
|
|
table += ('<td class="current-month day'+(j-firstDay+1)+'"><span class="day">'+(j-firstDay+1)+'</span></td>');
|
|
}
|
|
}
|
|
if (j%7==6) table += ('</tr>');
|
|
}
|
|
|
|
table += ('</table>');
|
|
|
|
el.html(table);
|
|
}
|
|
|
|
function getDaysInMonth(month,year) {
|
|
var daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];
|
|
if ((month==1)&&(year%4==0)&&((year%100!=0)||(year%400==0))){
|
|
return 29;
|
|
}else{
|
|
return daysInMonth[month];
|
|
}
|
|
}
|
|
|
|
|
|
// jQuery plugin initialisation
|
|
$.fn.calendarWidget = function(params) {
|
|
calendarWidget(this, params);
|
|
return this;
|
|
};
|
|
|
|
})(jQuery);
|