项目中有一要求是经过日历选择日期,在网上找了好多插件都不太符合,因而想本身写一个,奈何本身技术不咋地,不会写,因而在网上找了不少资料,终于找到了一位大神写的js 日历的教程,至于那位大神的文章,如今已经忘了,按照他的思路,我说一说本身的经验吧!javascript
其实,js写日历有3个关键css
第一是 根据年月判断有多少天java
function(year,imonth){ var month=parseInt(imonth); var temp=new Date(year,month,0); return temp.getDate(); };
第二是 一共有多少行app
function(idays,iweek){ return Math.ceil((idays + iweek)/7); };
第三步是 处理月的第一天是星期几 spa
function (iyear,imonth,iday){ var day=new Date(iyear,imonth,iday); return day.getDay(); };
3个关键说完了,如今来讲下具体js日历流程插件
(1)求出当前时间,年 月 日code
var nowDay=new Date(); var nowYear=nowDay.getFullYear(); var nowMonth=nowDay.getMonth(); var nowDays=nowDay.getDate();
(2)接下来就是咱们说的3个关键blog
//该月一共有多少天 var numDay=function(){ var temp=new Date(nowYear,nowMonth+1,0); return temp.getDate(); } //该月的第一天是星期几 var weekDay=function (){ var day=new Date(nowYear,nowMonth,1); return day.getDay(); }; //该月一共有几行 var numLine=function(){ return Math.ceil((numDay + weekDay)/7); };
(3)就是画出日历教程
//画出日历 xyear限制的年份 xmonth 月份 xday 限制的那一天 darwyear 绘制的那一年 drawmonth绘制的那个月份 sumday一月多少天 weeknow 第一天是周几 lins 一共绘制几行 function draw(xyear,xmonth,xday,darwyear,drawmonth,sumday,weeknow,lins){ var string="<div class='calendar-btn'><span class='prev' id='prev'></span><span class='year-btn'>"; string+=darwyear; string+="</span><span>年</span><span class='month-btn'>"; string+=drawmonth; string+="</span><span>月</span><span class='next' id='next'></span></div><div class='calendar-body'><table><thead><tr><td>Sun</td><td>Mon</td><td>Tue</td><td>Wed</td><td>Thu</td><td>Fri</td><td>Sat</td></tr></thead><tbody>"; for(var i=0;i<lins;i++){ string+="<tr>"; for(var k=0; k<7;k++){ var idx=i*7+k; //单元格天然序列号 var day=idx-weeknow+1; //计算日期 (day<=0 || day>sumday) ? day="" : day=idx-weeknow+1; //过滤无效日期(小于等于零的、大于月总天数的); if(darwyear==xyear && xmonth==(drawmonth-1)){ if(day!=""){ day>=xday? day="<td><a href='javascript:;'>"+day+"</a></td>":day="<td>"+day+"</td>"; }else{ day="<td>"+day+"</td>"; } }else if((darwyear==xyear &&(drawmonth-1)>xmonth) || darwyear >xyear){ if(day!="") { day = "<td><a href='javascript:;'>" + day + "</a></td>"; }else{ day="<td>"+day+"</td>"; } }else{ day="<td>"+day+"</td>"; } string+=day; } string+="</tr>"; } string+="</tbody></table></div>"; $("#id”).append(string); }
好比说你想限制今天以前不能选就把上面参数传入ip
(4) 上一个月,下一个月 重画日历
到了这一步基本上日历算是完了,由于 第四步就是重复第2步和第3步的工做,不如说上一个月就先求出上个月有多少天,第一天是周几,一共绘制几行等等,下个月同理。
如今日历是作好了,想要日历变得好看,就给他穿上css吧 。
功能不一样的日历,就是改变第三步画日历的代码