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;
			width: 100px;
			height: 19px;
			text-align: right;
			float:left;
		}
		div #dataTextContainer input
		{
			border-width: 0px;
			border-style: none;
			border-color: transparent;
			width: 68px;
			height: 14px;
			font-size: 12px;
			text-align: left;
		}
		div #dataTextContainer button
		{
			width: 22px;
			height: 19px;
			margin: 0px;
			padding:0px;
			text-align: center;
		}
		div #calendarContainer
		{
			width: 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;
 		}

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

JavaScript实现简单日历,布布扣,bubuko.com

时间: 2024-10-14 16:39:47

JavaScript实现简单日历的相关文章

js超简单日历

用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示日历. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>JS简单日历</title> 5 <meta http-equiv="Content-type" content=&

js编写当天简单日历

之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日历的实现原理.自己也尝试着做了一下,收获蛮大,掌握了基本的实现原理后,再想增加更多的功能,完全就可以自由发挥了,先在这里分享一下吧,有兴趣的可以试试! 一.表格行数问题 既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解

制作简单日历

web页面中很多地方都会用到日历显示,选择等,本文用html.css.javascript实现简单的日历.完成以后的效果与页面左侧的效果差不多,可以切换上个月.下个月.也可以根据实际情况进行扩展. html方面 html部分比较简单,声明一个div,具体的html用javascript生成.整体内容大概是这样的: 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset='utf-8'> 5 <link r

Javascript实现简单的选项卡

在线演示:http://jsfiddle.net/Web_Code/TbPDd/embedded/result/ <!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&

Javascript实现简单的下拉二级菜单

在线演示;http://jsfiddle.net/Web_Code/ThhbG/embedded/result/ <span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <

Javascript 实现简单计算器实例代码

Javascript 实现简单计算器实例代码 这篇文章主要介绍了Javascript 实现简单计算器实例代码的相关资料,需要的朋友可以参考下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Javascript实现简单的双向绑定

双向数据绑定指的是将对象属性变化绑定到UI,或者反之.换句话说,如果我们有一个拥有name属性的user对象,当我们给user.name赋予一个新值是UI也会相应的显示新的名字.同样的,如果UI包括了一个输入字段用来输入用户名,输入一个新的值会导致user对象中的那么属性发生变化. 双向数据绑定底层的思想非常的基本,它可以被压缩成为三个步骤: 我们需要一个方法来识别哪个UI元素被绑定了相应的属性 我们需要监视属性和UI元素的变化 我们需要将所有变化传播到绑定的对象和元素 虽然实现的方法有很多,但

javascript动手写日历组件(2)——优化UI和添加交互(by vczero)

一.优化UI 继上一篇,http://www.cnblogs.com/vczero/p/js_ui_1.html.开始优化UI,主要优化的部分有: (1)增加星期行.(2)字体设置.(3)日期垂直居中.(4)将单元格->底部线条.(5)修改文本的颜色对比.(6)将内部调用的函数加前缀_,如_addHeader()._addWeekday(). 修改的后基本效果如下图: 整个代码做了小修小改: 1 var Calendar = function(div){ 2 this.div = documen

javascript 对象简单解释

在javascript 中 数组是对象,函数是对象,正则表达式是对象,当然对象自然也是对象. 对象是属性的容器,每个属性都有名字和值,名字可以是包括空字符串在内的任意字符串,属性值是除undefined值之外的任何值. 若在对象中检索一个并不存在的成员变量值,将返回一个undefined值. 使用 || 运算符填充默认值: var middel = stooge["middle-name"] || "{none}" 尝试检索一个undefined值可能倒是typeE