返回的是一个字符串,并不是原生可以直接使用的。最重要的是setDate负值的使用,很有意思。然后判断了一下,输出的日期是否在当月范围内。其实用getMonth的方式也是可以的。
var createCalendar = function() {
var currentDate = new Date();
var activeDate = new Date();
var ret = ['<table><tr>'];
activeDate.setDate(1);
activeDate.setDate(1 - activeDate.getDay());
var header = "日一二三四五六";
//日历的头部
for(var i = 0 ; i < header.length ; i++) {
ret[ret.length] = '<th>' + header.charAt(i) + '</th>';
}
ret[ret.length] = '</tr><tr>';
var bf = true,af = false;
for(var i = 0 ; i < 42 ; i++) {
var date = activeDate.getDate();
if(date == 1) {
if(bf) {
bf = false;
} else {
af = true;
}
}
//日期是否在当前月份内
if(af || bf) {
ret[ret.length] = '<td class="grey">' + date + '</td>';
} else {
ret[ret.length] = '<td>' + date + '</td>';
}
//
if((i + 1) % 7 == 0) {
ret[ret.length] = '</tr><tr>';
}
activeDate.setDate(date + 1);
}
//修改最后一个
ret[ret.length - 1] = '</tr></table>';
//返回日历表格
return ret.join("");
};