zoukankan      html  css  js  c++  java
  • JavaScript实现简单日历

    页面代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<meta http-equiv="content-type" content="text/html;charset=utf-8">
    	<title>JavaScript Sample</title>
    	<style type="text/css">
    		div #dataTextContainer
    		{
    			border:1px #A5ACB2 solid;
    			 100px;
    			height: 19px;
    			text-align: right;
    			float:left;
    		}
    		div #dataTextContainer input
    		{
    			border- 0px;
    			border-style: none;
    			border-color: transparent;
    			 68px;
    			height: 14px;
    			font-size: 12px;
    			text-align: left;
    		}
    		div #dataTextContainer button
    		{
    			 22px;
    			height: 19px;
    			margin: 0px;
    			padding:0px;
    			text-align: center;
    		}
    		div #calendarContainer
    		{
    			 200px;
    			height: 100px;
    			z-index: 10000;
    			font-size: 13px;
    		}
    	</style>
    	<script type="text/javascript" src="inputDate.js"></script>
    </head>
    <body>
    	<div id = "dataTextContainer">
    		<input name="dataText" id="dateText" type="text" onfocus="javascript:getCurrentDay();"/>
    		<button onclick="javascript:displayCalendar();">
    			<img src="rili.jpg" width="15" height="12">
    		</button>
    	</div>
    	<div id="calendarContainer"></div>
    </body>
    </html>

    Javascript代码:

        	function getCurrentDay()
        	{
        		var newDate = new Date;
        		var odate = document.getElementById("dateText");
        		var date_year = newDate.getFullYear();
    			var date_month = newDate.getMonth() + 1;
    			var date_today = newDate.getDate();
        		odate.value = date_year+"-"+date_month+"-"+date_today;
        	}
        	function displayCalendar()
    		{
    			drawCalendar();
    		}
    		function closeCalendar()
    		{
    			var oCalendarContainer = document.getElementById("calendarContainer");
    			oCalendarContainer.innerHTML = "";
    		}
    		function drawCalendar(sYear,sMonth)
    		{
    			var newDate;
    			if(arguments[0] == null || arguments[1] == null)
    			{
    				newDate = new Date();
    			}
    			else
    			{
    				newDate = new Date(sYear,sMonth - 1);
    			}
    
    			var date_year = newDate.getFullYear();
    			var date_month = newDate.getMonth() + 1;
    			var date_today = newDate.getDate();
    			var date_day = newDate.getDay();
    
    			var nextMonth = date_month + 1;
    			var nextYear = date_year;
    			var prevMonth = date_month - 1;
    			var prevYear = date_year;
    
    			if(sMonth == 12)
    			{
    				nextMonth = 1;
    				nextYear = date_year + 1;
    			}
    			if(sMonth == 1)
    			{
    				prevMonth = 12;
    				prevYear = date_year - 1;
    			}
    
    			var calendarTable = "";
    			calendarTable += '<table width="200" border="0" cellpadding="0" cellspacing="0" style="background-color:#0066FF;text-align:center;">';
    			calendarTable += ' <tr style="background-color:#339999;">';
    			//向前翻年
    			calendarTable += '<td colspan="2" onclick="javascript:drawCalendar('+(prevYear - 1)+','+prevMonth+');"'+
    			   		' style="cursor:pointer;background-color:#FF6600;"><<<</td>';
    			//向前翻月
    			calendarTable += '<td colspan="2" onclick="javascript:drawCalendar('+prevYear+','+prevMonth+');"'+
    			   		' style="cursor:pointer;background-color:#FF6600;"><<</td>';
    			//向后翻月
    			calendarTable += '<td colspan="2" onclick="javascript:drawCalendar('+nextYear+','+nextMonth+');"'+
    			   		' style="cursor:pointer;background-color:#FF6600;">>></td>';
    			 //向后翻年
    			 calendarTable += '<td colspan="1" onclick="javascript:drawCalendar('+(nextYear + 1)+','+nextMonth+');"'+
    			   		' style="cursor:pointer;background-color:#FF6600;">>>></td>';
    			calendarTable += ' </tr>';
    
    			//星期表头
    			calendarTable += '  <tr style="background-color:#6699FF;">';
    			calendarTable += '      <td>日</td>';
    			calendarTable += '      <td>一</td>';
    			calendarTable += '      <td>二</td>';
    			calendarTable += '      <td>三</td>';
    			calendarTable += '      <td>四</td>';
    			calendarTable += '      <td>五</td>';
    			calendarTable += '      <td>六</td>';
    			calendarTable += '  </tr>';
    
    			//计算一个月内的天数,注意闰月
     			var dayNum_in_month = [31,28,31,30,31,30,31,31,30,31,30,31];
     			var isleapyear = date_year % 4;
     			if(isleapyear == 0)
     			{
     				dayNum_in_month[1] = 29;
     			}
     			var month_alldays = dayNum_in_month[date_month - 1];
    
     			//计算行数,line_top表示当前日期上面的行数,包含当前行;line_bot表示当前日期以下的行数,不包含当前行
     			var line_top;
     			var line_bot;
     			if((date_today - date_day + 1) % 7 != 0)
     			{
     				line_top = Math.floor((date_today - date_day + 1) / 7) + 1;
     			}
     			else
     			{
     				line_top = Math.floor((date_today - date_day + 1) / 7);
     			}
    
     			if((30 - date_today + date_day + 1) % 7 != 0)
     			{
     				line_bot = Math.floor((30 - date_today + date_day + 1) / 7) + 1;
     			}
     			else
     			{
     				line_bot = Math.floor((30 - date_today + date_day + 1) / 7);
     			}
    
     			//定义一个二维数组,预备一个6*7的数组,数组中每一个元素相应一个单元格(日期)
     			var dateList = new Array([""],[""],[""],[""],[""],[""],[""]);
     			var dateCell;
    
     			for(var i = 1; i < 7; i++)
     			{
     				//i是行数
     				calendarTable += '  <tr>';
     				for(var j = 0; j < 7; j++)
     				{
     					//j是列数
     					dateList[i][j] = date_today - 7 * (line_top - i + 1) + j - date_day;
     					//假设武器<=0,置空
     					if((date_today - 7 * (line_top - i + 1) + j - date_day) <= 0)
     					{
     						dateList[i][j] = " ";
     					}
     					//假设日期大于月总天数,则不显示
     					if((date_today - 7 * (line_top - i + 1) + j - date_day) > month_alldays)
     					{
     						dateList[i][j] = " ";
     					}
    
     					if(dateList[i][j] != " ")
     					{
     						//假设单元格不是空,那么能够设置其触发三个事件,共同拥有三个事件
     						//1、单击事件,将当前日期写入文本框
     						//2、鼠标指针移到单元格上,改变背景
     						//3、鼠标指针离开单元格,背景复原
     						dateCell = 
     									'<td onclick="javascript:setDateText('+date_year+','+date_month+',this.firstChild.nodeValue);"'+'onmouseover="javascript:setFocus(this);"'+'  onmouseout="javascript:setFocusOut(this);"'+ '  style="cursor:pointer;">'+dateList[i][j]+'</td>';
    
     						if(i == line_top && j == line_bot)
     						{
     							dateCell = 
     									'<td onclick="javascript:setDateText('+date_year+','+date_month+',this.firstChild.nodeValue);"'+'onmouseover="javascript:setFocus(this);"'+'  onmouseout="javascript:setFocusOut(this);"'+ '  style="cursor:pointer;background-color:#FF6600;">'+dateList[i][j]+'</td>';
     						}
     					}
     					else
     					{
     						dateCell = "<td> </td>";
     					}
     					calendarTable += dateCell;
     				}
     				calendarTable += '</tr>';
     			}
     			calendarTable += '<tr><td colspan="7"'+'onclick="javascript:closeCalendar();"'+'style="background-color#339999;cursor:pointer;color:red;font-weight:bold">'+'关闭('+date_year+"年"+date_month+"月"+')</td></tr>';
     			calendarTable += '</table>';
    
     			//将日期写入
     			var oCalendarContainer = document.getElementById("calendarContainer");
     			oCalendarContainer.innerHTML = calendarTable;
     		}
    
     		//当鼠标指针指到当前日期单元格
     		function setFocus(obj)
     		{
     			obj.style.backgroundColor = "#FF6600";
     		}
     		//当鼠标指针离开当前日期单元格
     		function setFocusOut(obj)
     		{
     			obj.style.backgroundColor = "";
     		}
     		//鼠标单击当前单元格
     		function setDateText(sYear,sMonth,sDate)
     		{
     			var oDateText = document.getElementById("dateText");
     			oDateText.value = sYear + "-" + sMonth + "-" + sDate;
     		}

    效果:>>下一月 >>>下一年   <<上一月  <<<上一年


  • 相关阅读:
    EMF介绍系列(一、EMF与MDA)
    EMF介绍系列(四、枚举类型、自定义类型和Map)
    使用osgi.util.NLS简化资源文件访问
    2012 定制化产品探讨(周金根).pdf
    敏捷个人理念与模型PPT及今年唯一一次的公开线上课堂
    生活:父与子三亚行
    与北邮学子交流成长,敏捷个人总体介绍 PPT
    敏捷个人教你如何制作2012生活看板
    敏捷个人架构图 V1.3
    敏捷个人微刊封面及敏捷个人使命和加入社区方式
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4354441.html
Copyright © 2011-2022 走看看