最近有用到日历可需要编辑文本的日历,为了绑定数据的方便,所以用js写了一套日历,其实思想也是很简单。实现步骤如下:
1、首先取得处理月的总天数
js不提供此参数,我们需要计算。考虑到闰年问题会影响二月份的天数,我们先编写一个判断闰年的自编函数:
function is_leap(year) {
return (year%100==0"htmlcode">for(i=0;i<tr_str;i++) { //表格的行 for(k=0;k<7;k++) { //表格每行的单元格 idx=i*7+k; //单元格自然序列号 date_str=idx-firstday+1; //计算日期 (date_str<=0 || date_str>m_days[mnow]) " " : date_str=idx-firstday+1; //过滤无效日期(小于等于零的、大于月总天数的) $(".date-info .date").last().append("<td>" + date_str + "</td>"); } }单元格的自然序号是否代表有效日期非常关键,为此必须加入一个过滤机制:仅打印有效的日期。有效的日期大于0小于小于等于处理月的总天数。
6、上一个月与下一个月
if(mnow<=0){ mnow=11; ynow=ynow-1; }else{ mnow--; } if(mnow>=11){ mnow=0; ynow=ynow+1; }else{ mnow++; }获取上一个月时,到1月份需注意;获取下一个月时,到12月份时要注意。
渲染时,需要先移除旧的日历,再添加新的日历。
var nstr = new Date(); var ynow = nstr.getFullYear(); var mnow = nstr.getMonth(); var dnow = nstr.getDate(); var mnow_real = mnow; calendar(nstr,ynow,mnow,dnow); monDetail(ynow,mnow_real); function monDetail(ynow,mnow){ mnow_real = mnow+1; $(".month-detail").html(ynow+"-"+ mnow_real); //显示当前年月 } function is_leap(year) { //判断是否为闰年 return (year%100==0".date-info tr.date").remove(); /改变月份时,先移除旧的日期 var nlstr = new Date(ynow,mnow,1); //当月第一天 var firstday = nlstr.getDay(); //第一天星期几 var m_days=new Array(31,28+is_leap(ynow),31,30,31,31,30,31,30,31,30,31); //每个月的天数 var tr_str=Math.ceil((m_days[mnow] + firstday)/7); //当前月天数+第一天是星期几的数值 获得 表格行数 var i,k,idx,date_str; for(i=0;i<tr_str;i++) { //表格的行 $(".date-info tbody").append("<tr></tr>"); for(k=0;k<7;k++) { //表格每行的单元格 idx=i*7+k; //单元格自然序列号 date_str=idx-firstday+1; //计算日期 (date_str<=0 || date_str>m_days[mnow]) " " : date_str=idx-firstday+1; //过滤无效日期(小于等于零的、大于月总天数的) $(".date-info .date").last().append("<td>" + date_str + "</td>"); } } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。