今天试着用jquery 写了一个日历,等有时间研究一下别人写的思路,上代码:
<!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></title>
<style type="text/css">
* { margin:0; padding:0;}
.red { color:red;}
.date { cursor:pointer;}
.today { background:#F90; font-weight:bold;cursor:pointer;}
#calendar { 260px; margin:50px auto; }
#date{ text-align:center; border:1px #ccc solid; border-bottom:0;}
#date a { display:inline-block; 18px; height:20px; background-position:center -20px; vertical-align:middle; cursor:pointer;}
#date #selectDate{ 120px;display:inline-block;}
#preYear { background:url(http://d.hiphotos.baidu.com/album/s%3D900%3Bq%3D90/sign=ad9b3be5fdfaaf5180e38dbfbc6fe5d3/728da9773912b31bd3d15eea8618367adbb4e1b0.jpg);}
#preMonth { background:url(http://f.hiphotos.baidu.com/album/s%3D900%3Bq%3D90/sign=f73776510cf431adb8d24f397b0ddd92/43a7d933c895d143e8cb77e073f082025baf07b7.jpg);}
#nextMonth { background:url(http://g.hiphotos.baidu.com/album/s%3D900%3Bq%3D90/sign=f0feb6cb5343fbf2c12caa238045bbbd/80cb39dbb6fd5266e6b4afd7ab18972bd5073651.jpg);}
#nextYear { background:url(http://d.hiphotos.baidu.com/album/s%3D900%3Bq%3D90/sign=09074fa3352ac65c63056a73cbc9c32c/ac6eddc451da81cb0a5b100e5266d016082431b7.jpg);}
#calTable { 100%; border-collapse:collapse;}
#calTable th,#calTable td{ 30px; height:20px; border:1px #ccc solid; text-align:center;}
#calTable tbody{ font-family:Georgia, "Times New Roman", Times, serif;}
.c_yellow { background-color:#FFFF33}
</style>
<script src="../myweb/js/jquery-1.8.0.js"></script>
<script>
jQuery(function($){
function showTm(beginyear,endyear,selyear,selectMonth,timetb,mousecls){
this.beginyear=beginyear, //开始年份
this.endyear=endyear, //结束年份
this.selyear=selyear, //选择年份select的id
this.selectMonth=selectMonth, //选择月份select的id
this.timetb=timetb, // 日期表格
this.mousecls=mousecls //鼠标滑过的样式切换类名
}
showTm.prototype.changeTm = function(){
var _self=this;
//填充年份
var minyear=Math.min(_self.endyear,_self.beginyear);
if(minyear<1970){
alert("您输入的开始年份需要大于1970年!");
return false;
}
var len=Math.abs(_self.endyear - _self.beginyear);
for(var i=0;i<(len+1);i++){
$("#"+_self.selyear)[0].options[i]=new Option(minyear+i);
}
//初始化今天日期,高亮显示今天日期
nowtoday()
function nowtoday(){
var now=new Date();
var nowyear=now.getFullYear();
var nowmonth=now.getMonth();
var nowday=now.getDay();
$("#"+_self.selyear).val(nowyear);
$("#"+_self.selectMonth).val(nowmonth);
}
//填充时间table
changeTmnow();
$("#"+_self.selyear).change(changeTmnow);
$("#"+_self.selectMonth).change(changeTmnow);
function changeTmnow(){
var daycont; //每月的天数
var yearval=parseInt( $("#"+_self.selyear).val() );
var monval=parseInt( $("#"+_self.selectMonth).val() );
//确定每个月的天数
if($.inArray(monval,[1,3,5,7,8,10,12])>-1){ //判断之前需要转换数据类型
daycont = 31;
}else if(monval!=2){
daycont = 30;
}else{
daycont=(yearval%400==0)?29:28; //判断是否是闰年
};
//清空之前的日期
$("#"+_self.timetb+" tbody td").empty();
//填充新的日期
var firsday=new Date(yearval,monval-1,1)
var firstdate=firsday.getDay(); //确定每月的第一天 填充那个格子
for(var i=0;i<daycont;i++){
$("#"+_self.timetb+" tbody td").eq(firstdate+i).text(i+1)
}
//高亮显示今天
outup();
function outup(){
$("#"+_self.timetb+" tbody td").css({"color":"#333"})
var now=new Date();
var nowyear=now.getFullYear();
var nowmonth=now.getMonth();
var nowdate=now.getDate();
if(yearval==nowyear && nowmonth==(monval-1)){
$("#"+_self.timetb+" tbody td").eq(nowdate-1+firstdate).css({"color":"red"})
}
}
//添加鼠标滑过效果
$("#"+_self.timetb+" tbody td").hover(function(){
$(this).toggleClass(_self.mousecls)
})
} //end changeTmnow()
} //end changeTm()
//函数的调用
var showTm1=new showTm(1975,2550,"selectYear","selectMonth","calTable","c_yellow");
showTm1.changeTm();
})
</script>
</head>
<body>
<div id="calendar">
<div id="date">
<a id="preMonth" title="上一年"></a>
<a id="preYear" title="上一月"></a>
<span id="selectDate">
<select id="selectYear">
</select>
<select id="selectMonth">
<option value="1">1月</option>
<option value="2">2月</option>
<option value="3">3月</option>
<option value="4">4月</option>
<option value="5">5月</option>
<option value="6">6月</option>
<option value="7">7月</option>
<option value="8">8月</option>
<option value="9">9月</option>
<option value="10">10月</option>
<option value="11">11月</option>
<option value="12">12月</option>
</select>
</span>
<a id="nextYear" title="下一月"></a>
<a id="nextMonth" title="下一年"></a>
</div>
<table id="calTable">
<thead>
<tr>
<th class="red">日</th>
<th>一</th>
<th>二</th>
<th>三</th>
<th>四</th>
<th>五</th>
<th class="red">六</th>
</tr>
</thead>
<tbody>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
下面是各种date() 相关方法,方便查阅:
Date 对象用于处理日期和时间。
创建 Date 对象的语法:
var myDate=new Date()
Date 对象会自动把当前日期和时间保存为其初始值。
参数形式有以下5种:
new Date("month dd,yyyy hh:mm:ss");
new Date("month dd,yyyy");
new Date(yyyy,mth,dd,hh,mm,ss);
new Date(yyyy,mth,dd);
new Date(ms);
注意最后一种形式,参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下:
month:用英文表示月份名称,从January到December
mth:用整数表示月份,从(1月)到11(12月)
dd:表示一个月中的第几天,从1到31
yyyy:四位数表示的年份
hh:小时数,从0(午夜)到23(晚11点)
mm:分钟数,从0到59的整数
ss:秒数,从0到59的整数
ms:毫秒数,为大于等于0的整数
如:
new Date("January 12,2006 22:19:35");
new Date("January 12,2006");
new Date(2006,0,12,22,19,35);
new Date(2006,0,12);
new Date(1137075575000);
Date() 返回当日的日期和时间。
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getFullYear() 从 Date 对象以四位数字返回年份。
getYear() 请使用 getFullYear() 方法代替。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。
parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setFullYear() 设置 Date 对象中的年份(四位数字)。
setYear() 请使用 setFullYear() 方法代替。
setHours() 设置 Date 对象中的小时 (0 ~ 23)。
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
setTime() 以毫秒设置 Date 对象。
setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
toSource() 返回该对象的源代码。
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toDateString() 把 Date 对象的日期部分转换为字符串。
toGMTString() 请使用 toUTCString() 方法代替。 1 3
toUTCString() 根据世界时,把 Date 对象转换为字符串。
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。
valueOf() 返回 Date 对象的原始值。
var objDate=new Date([arguments list]);