日历dom版(原创文章,转载请注明出处)

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>日历</title>
<script type="text/javascript">
var day;
function init()
{
 //获取系统当前时间
 var current=new Date();
 var year=current.getYear();
 var month=current.getMonth()+1;
 var yearIndex;
 var monthIndex;
 //初始化年月
 var dYear=document.getElementById("year");
 var dMonth=document.getElementById("month");
 for(var i=1970;i<2070;i++)
 {
  if(i==year)
  {
   yearIndex=dYear.length;
  }
  var op=new Option(i,i);
  dYear.options[dYear.length]=op;
 }
 for(var j=1;j<13;j++)
 {
  if(j==month)
  {
   monthIndex=dMonth.length;
  }
  var op=new Option(j,j);
  dMonth.options[dMonth.length]=op;
 }
 dYear.selectedIndex=yearIndex;
 dMonth.selectedIndex=monthIndex;
 printCanlender();
 
}
//判断平年闰年
function isLeapYear(year)
{
 return ((year%4==0 && year%100!=0) ||year%400==0)?1:0;
}
//判断指定的天数
function everyMonthDays(year,month)
{
 var arr=[31,28,31,30,31,30,31,31,30,31,30,31];
 if(month!=2||isLeapYear(year)==0)
 {
  return arr[month-1];
 }
 return arr[month-1]+1;
}
//判断从公元元年到指定年第一天的天数
function partDays(year)
{
 var days=365*year;
 for(var i=1;i<year;i++)
 {
  days+=isLeapYear(i);
 }
 return days;
}
//计算总天数
function totalDays(year,month)
{
 var days=partDays(year);
 for(var i=1;i<month;i++)
 {
  days+=everyMonthDays(year,i);
 }
 return days;
}
//计算指定月第一天是星期几
function week(year,month)
{
 var days=totalDays(year,month);
 return days%7;
}
//打印
function printCanlender()
{
 //获取要显示日历的div
 var divCanlender=document.getElementById("divCan"); 
 var year=document.getElementById("year").options[document.getElementById("year").selectedIndex].value;
 var month=document.getElementById("month").options[document.getElementById("month").selectedIndex].value;
 var weekDay=week(year,month);
 //alert(weekDay);
 var days=everyMonthDays(year,month);
 day=1;
 //使用数组存放周一到周日
 var arrWeek=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
 //使用DOM创建一个表
 var tb=document.createElement("table");
 //使用DOM创建一个Tbody
 var objTbody=document.createElement("tbody");
 //创建一行七列
 var objTr=document.createElement("tr");
 for(var i=0;i<arrWeek.length;i++)
 {
  var objTd=document.createElement("td");
  var objText=document.createTextNode(arrWeek[i]);
  objTd.appendChild(objText);
  objTr.appendChild(objTd);
 }
 //把创建好的行添加到tbody上
 objTbody.appendChild(objTr);
 
 for(var i=1;i<7;i++)
 {
  var objTrDay=document.createElement("tr");
  for(var j=0;j<7;j++)
  { 
   //在打印第一行的时候使用,并让j和weekDay只相等一次
    if((j==weekDay)||(day<=days && day>1) )
   {
    //str+="<td>"+day+"</td>";
    var objTdDay=document.createElement("td");
    var objTextDay=document.createTextNode(day);
    objTdDay.appendChild(objTextDay);
    objTrDay.appendChild(objTdDay);
    weekDay++;
    day++;
   }
   /*else if(day<=days && day>1 )
   {
    weekDay++;
    var objTdDay=document.createElement("td");
    var objTextDay=document.createTextNode(day);
    objTdDay.appendChild(objTextDay);
    objTrDay.appendChild(objTdDay);
    day++;
   }*/
   else
   {
    var objTdDay=document.createElement("td");
    var objTextDay=document.createTextNode(" ");
    objTdDay.appendChild(objTextDay);
    objTrDay.appendChild(objTdDay);
   }
  }
  objTbody.appendChild(objTrDay);
  //str+="</tr>";
 }
 tb.appendChild(objTbody);
 divCanlender.innerText="";
 divCanlender.appendChild(tb);
}
</script>
</head>

<body onload="init()">
<div id="drop">
<span>年<select id="year" onchange="printCanlender()"></select></span><span>月<select id="month" onchange="printCanlender()"></select></span>
</div>
<div id="divCan">
</div>

</body>
</html>

posted @ 2009-12-13 22:10  坐看风起  阅读(791)  评论(1编辑  收藏  举报