當(dāng)前位置:軟件學(xué)堂 > 資訊首頁 > 網(wǎng)絡(luò)編程 > 編程其他 > 用JS自定義的日歷

用JS自定義的日歷

2012/11/6 10:27:08作者:佚名來源:網(wǎng)絡(luò)

移動(dòng)端

【實(shí)例名稱】

用JS自定義的日歷

【實(shí)例描述】

在很多網(wǎng)絡(luò)名人的Blog上都增加了一些個(gè)性時(shí)尚的日歷。本例學(xué)習(xí)如何使用JavaScript設(shè)計(jì)自己的日歷。

【實(shí)例代碼】

 

<html xmlns="http://www.w3.org/1999/xhtml" > <head>     <title>無標(biāo)題頁-學(xué)無憂(denvermotorcycleaccidentlawyer.com)</title>

<script language="javascript">  var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); //定義月份  var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31);                      //定義每月的天數(shù)  var days = new Array("日","一", "二", "三","四", "五", "六");  //定義星期幾  var classTemp;  var today=new getToday();  var year=today.year;            //獲取年份  var month=today.month;          //獲取月份  var newCal; //用來獲取指定年月中的天數(shù)  function getDays(month, year)  {   if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28;   else return daysInMonth[month];  } //獲取今天的年、月、日  function getToday() {   this.now = new Date();   this.year = this.now.getFullYear();   this.month = this.now.getMonth();   this.day = this.now.getDate();  } //定義日歷表的顯示方法  function Calendar() {   newCal = new Date(year,month,1);   today = new getToday();     var day = -1;   var startDay = newCal.getDay();   var endDay=getDays(newCal.getMonth(), newCal.getFullYear());   var daily = 0;   if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth()))   {    day = today.day;   }   var caltable = document.all.caltable.tBodies.calendar;   var intDaysInMonth = getDays(newCal.getMonth(), newCal.getFullYear());

  for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++)    for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++)    {     var cell = caltable.rows[intWeek].cells[intDay];     var montemp=(newCal.getMonth()+1) <10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1);             if ((intDay == startDay) && (0 == daily)){ daily = 1;}     var daytemp=daily<10?("0"+daily):(daily);     var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">";     if(day==daily) cell.className="DayNow";     else if(intDay==6) cell.className = "DaySat";     else if (intDay==0) cell.className ="DaySun";     else cell.className="Day";     if ((daily > 0) && (daily <= intDaysInMonth))     {      cell.innerText = daily;      daily++;     } else     {      cell.className="CalendarTD";      cell.innerText = "";     }   }   document.all.year.value=year;   document.all.month.value=month+1;  } //實(shí)現(xiàn)月份向前翻頁的方法  function subMonth()  {   if ((month-1)<0)   {    month=11;    year=year-1;   } else   {    month=month-1;   }   Calendar();  } //實(shí)現(xiàn)月份向后翻頁的方法  function addMonth()  {   if((month+1)>11)   {    month=0;    year=year+1;   } else   {    month=month+1;   }   Calendar();  } //判斷用戶自己輸入的年份和月份  function setDate()  {   if (document.all.month.value<1||document.all.month.value>12)   {    alert("月的有效范圍在1-12之間!");    return;   }   year=Math.ceil(document.all.year.value);   month=Math.ceil(document.all.month.value-1);   Calendar();  }  //設(shè)置按鈕的樣式 function buttonOver() {  var obj = window.event.srcElement;  obj.runtimeStyle.cssText = "background-color:#FFFFFF"; } function buttonOut() {  var obj = window.event.srcElement;  window.setTimeout(function(){obj.runtimeStyle.cssText = "";},300); } </script> <Style> Input {font-family: verdana;font-size: 9pt; text-decoration: none;background-color: #FFFFFF; height: 20px;border: 1px solid #666666;color:#000000;} .Calendar {font-family: verdana;text-decoration: none; width: 170;background-color: #C0D0E8; font-size: 9pt;border:0px dotted #1C6FA5;} .CalendarTD {font-family: verdana;font-size: 7pt; color: #000000;background-color:#f6f6f6;height: 20px; width:11%;text-align: center;} .Title {font-family: verdana;font-size: 11pt; font-weight: normal;height: 24px;text-align: center; color: #333333;text-decoration: none;background-color: #A4B9D7; border-top-width: 1px;border-right-width: 1px; border-bottom-width: 1px;border-left-width: 1px; border-bottom-style:1px;border-top-color: #999999; border-right-color: #999999;border-bottom-color: #999999; border-left-color: #999999;} .Day {font-family: verdana;font-size: 7pt; color:#243F65;background-color: #E5E9F2;height: 20px; width:11%;text-align: center;} .DaySat {font-family: verdana;font-size: 7pt; color:#FF0000;text-decoration: none;background-color:#E5E9F2; text-align: center;height: 18px;width: 12%;} .DaySun {font-family: verdana;font-size: 7pt;color: #FF0000; text-decoration: none;background-color:#E5E9F2; text-align: center;height: 18px;width: 12%;} .DayNow {font-family: verdana;font-size: 7pt; font-weight: bold;color: #000000;background-color: #FFFFFF; height: 20px;text-align: center;} .DayTitle {font-family: verdana;font-size: 9pt;color: #000000; background-color: #C0D0E8;height: 20px;width:11%;text-align: center;} .DaySatTitle {font-family: verdana;font-size: 9pt;color:#FF0000; text-decoration: none;background-color:#C0D0E8;text-align: center; height: 20px;width: 12%;} .DaySunTitle {font-family: verdana;font-size: 9pt;color: #FF0000; text-decoration: none;background-color: #C0D0E8;text-align: center; height: 20px;width: 12%;} .DayButton {font-family: Webdings;font-size: 9pt; font-weight: bold;color: #243F65;cursor:hand;text-decoration: none;} </Style>

需要在body中添加—個(gè)表格,并在加載事件中調(diào)用“calendar”方法,代碼如下所示: </head> <body onload=" Calendar()"> <table border="0" cellpadding="0" cellspacing="1" class="Calendar" id="caltable"> <thead>      <tr align="center" valign="middle">   <td colspan="7" class="Title">    <a href="javaScript:subMonth();" title="上一月" Class="DayButton">3</a>    <input name="year" type="text" size="4" maxlength="4" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')"  onpaste="this.value=this.value.replace(/[^0-9]/g,'')"> 年 <input name="month" type="text" size="1" maxlength="2" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')"  onpaste="this.value=this.value.replace(/[^0-9]/g,'')"> 月 <a href="JavaScript:addMonth();" title="下一月" Class="DayButton">4</a>   </td>  </tr>  <tr align="center" valign="middle">   <script language="javascript">     document.write("<td class=DaySunTitle id=diary >" + days[0] + "</td>");    for (var intLoop = 1; intLoop < days.length-1;intLoop++)     document.write("<td class=DayTitle id=diary>" + days[intLoop] + "</td>");     document.write("<td class=DaySatTitle id=diary>" + days[intLoop] + "</td>");   </script>  </tr> </thead> <tbody border="1" cellspacing="0" cellpadding="0" ID="calendar" ALIGN="CENTER" >  <script language="javascript">   for (var intWeeks = 0; intWeeks < 6; intWeeks++)   {    document.write("<TR style='cursor:hand'>");    for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=CalendarTD onMouseover='buttonOver();' onMouseOut='buttonOut();'></TD>");    document.write("</TR>");   }  </script> </tbody> </table> </body> </html>

 

 

【運(yùn)行效果】

 自定義的日歷運(yùn)行效果

【難點(diǎn)剖析】

本例的難點(diǎn)是對(duì)天數(shù)的精確計(jì)算,尤其是閏年的二月份。本例中計(jì)算閏年使用的表達(dá)式是“((0==year%4)&&(0!=(year%100)))II(0==year%400)?29:28;”如果是閏年,則二月份的天數(shù)為29,否則是28。

【源碼下載】

為了JS代碼的準(zhǔn)確性,請點(diǎn)擊:JS自定義的日歷 進(jìn)行本實(shí)例源碼下載 

標(biāo)簽: JS  日期