2012/11/6 10:27:08作者:佚名来源:网络
【实例名称】
用JS自定义的日历
【实例描述】
在很多网络名人的Blog上都增加了一些个性时尚的日历。本例学习如何使用JavaScript设计自己的日历。
【实例代码】
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>无标题页-学无忧(www.xue51.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); //定义每月的天数 var days = new Array("日","一", "二", "三","四", "五", "六"); //定义星期几 var classTemp; var today=new getToday(); var year=today.year; //获取年份 var month=today.month; //获取月份 var newCal; //用来获取指定年月中的天数 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; } //实现月份向前翻页的方法 function subMonth() { if ((month-1)<0) { month=11; year=year-1; } else { month=month-1; } Calendar(); } //实现月份向后翻页的方法 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(); } //设置按钮的样式 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中添加—个表格,并在加载事件中调用“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>
【运行效果】
【难点剖析】
本例的难点是对天数的精确计算,尤其是闰年的二月份。本例中计算闰年使用的表达式是“((0==year%4)&&(0!=(year%100)))II(0==year%400)?29:28;”如果是闰年,则二月份的天数为29,否则是28。
【源码下载】
为了JS代码的准确性,请点击:JS自定义的日历 进行本实例源码下载
标签: 日期
相关文章
ip雷达 v5.0.2绿色版
详情WinSCPv5.15.1绿色中文版
详情filezilla client v5.5
详情wireshark中文版 v3.4.9
详情Boson Netsimv10.8破解版
详情风行播放器 v3.0.6.106
详情爱奇艺客户端 v10.1.0.6636官方版
详情搜狐影音 v7.0.19.0官方版
详情乐视视频 v7.3.2.192
详情华数tv客户端PC版 v1.1.2.0
详情cbox央视影音 v5.1.2.1经典版
详情软媒收音机(魔方) v1.13
详情倾听网络收音机 v3.0.0.0
详情魅影流声全球网络收音机 v1.0.0.1
详情酷狗电台 v8.2.75
详情暴龙网络收音机 v2.5.1
详情克莉2v1.0中文版
详情冬日计划v1.2中文版
详情刺客信条英灵殿v1.0吾爱破解版
详情刺客信条英灵殿终极v1.0免安装破解版
详情动物森友会v1.10.0最新破解版
详情哈迪斯杀出地狱v1.37中文破解版
详情嗜血印中文豪华版v1.0豪华版破解版 附游戏攻略秘籍
详情城市战斗v1.0中文破解版
详情尼尔人工生命v1.0steam免费破解版
详情尼尔人工生命升级版v1.0PC破解版
详情尼尔人工生命升级版v1.2247中文破解版
详情层层恐惧2中文破解版v1.0绿色免安装版
详情往日不再v1.0 steam破解版
详情往日不再v1.0pc破解版
详情救赎之路v1.0中文破解版
详情斯盖尔女仆v1.0中文破解版
详情新盗墓笔记官方版v1.215.589730
详情无尽的拉格朗日无限金币钻石版v1.2.267172破解版
详情明日之后无限小太阳版v1.0.246安卓版
详情双生幻想vivo版v6.6.83安卓版
详情剑网1归来内购免费版v1.1.116安卓版
详情模拟城市我是市长国际版v0.69.21342.22832安卓版
详情迷你世界999999迷你币版v1.20.5破解版
详情王牌战争无限内购版v9.7安卓版
详情云上城之歌不氪金版v10.16安卓版
详情王铲铲的致富之路破解版v1.1.8安卓版
详情创造与魔法无限点券版v1.0.0505安卓版
详情狩猎使命九游版v1.6.6.000
详情魔镜物语变态版v2.1.4无限金币版
详情黑月手游免费版v2.2.0安卓版
详情曙光英雄v1.0.12.0.20无限钻石版
详情原始传奇无限元宝版v1.6.806内购破解版
详情