本文实例为大家分享了js实现一个简单的日历控件,供大家参考,具体内容如下
效果图:
具体代码:
<!DOCTYPE html>
<html>
<head>
<meta charset=\"utf-8\">
<title>date</title>
<style type=\"text/css\">
*{ margin:0; padding:0;}
a{ text-decoration:none; outline:none;}
body a{outline:none;blr:expression(this.onFocus=this.blur());}
img{ border:none;}
ul{ list-style:none;}
body{ color:#666666; font-size:14px; font-family:\"微软雅黑\"; background-color:#fff; height:100%; overflow-y:scroll;*overflow-y:inherit;}
/*html{ height:100%;}*/
.clearfix:after{ content:\".\"; display:block; height:0; clear:both; overflow:hidden;}
.clearfix{ zoom:1;}
#box{width:350px; position:absolute;}
#title{width:350px; height:50px;}
#month{ float:left;width:60px; height:50px;text-align:center;cursor:pointer;line-height:50px;}
#year{float:left;width:80px; height:50px;text-align:center;cursor:pointer;line-height:50px;}
#week{ width:350px;height:50px;}
#week div{ float:left; width:48px; height:48px; margin:1px; background:#C90; color:#fff; text-align:center; line-height:48px; cursor:pointer;}
#con{ width:350px;}
#con div{ float:left; width:48px; height:48px; margin:1px; background:#CCC; color:#333; text-align:center; line-height:48px; cursor:pointer;}
#con .edate{background:#999;}
#con .edate:hover{background:#09F; color:#fff;}
#con div.now{background:#09F; color:#fff;}
#prevmonth,#nextmonth,#prevyear,#nextyear{float:left;width:50px; height:50px;text-align:center;cursor:pointer;line-height:50px;}
#btns{width:350px; height:40px;}
#nowtime{ float:left; margin:5px; height:30px; line-height:30px; padding:0 5px; background:#09F; cursor:pointer; border-radius:5px;}
#nowtime:hover{background:#ddd;}
#cleartime{float:left; margin:5px; height:30px; line-height:30px; padding:0 5px; background:#09F; cursor:pointer; border-radius:5px;}
</style>
</head>
<body>
<p style=\" margin:100px;\">选择日期:<input type=\"text\" id=\"date\" value=\"\" style=\"height:40px; line-height:40px;\"/></p>
</body>
<script type=\"text/javascript\">
window.onload=function(){
//创建日历控件基本结构
var obody=document.body;
createbox();
function createbox(){
var ddbox=document.createElement(\"div\");
ddbox.id=\"box\";
ddbox.style.display=\"none\";
var str=\"\";
str+=\'<div id=\"title\"><div id=\"prevyear\"><<</div><div id=\"prevmonth\"><</div><div id=\"month\"></div><div id=\"year\"></div><div id=\"nextmonth\">></div><div id=\"nextyear\">>></div></div>\';
str+=\'<div id=\"week\"><div>日</div><div>一</div><div>二</div><div>三</div><div>四</div><div>五</div><div>六</div></div>\';
str+=\'<div id=\"con\" class=\"clearfix\"></div>\';
str+=\'<div id=\"btns\"><div id=\"nowtime\">当前时间</div><div id=\"cleartime\">清空</div></div>\';
ddbox.innerHTML=str;
obody.appendChild(ddbox);
};
//===================get ele===============================
var omonth=document.getElementById(\"month\");
var oyear=document.getElementById(\"year\");
var con=document.getElementById(\"con\");
var prevmonth=document.getElementById(\"prevmonth\");
var nextmonth=document.getElementById(\"nextmonth\");
var prevyear=document.getElementById(\"prevyear\");
var nextyear=document.getElementById(\"nextyear\");
var nowtime=document.getElementById(\"nowtime\");
var date=document.getElementById(\"date\");
var box=document.getElementById(\"box\");
var cleartime=document.getElementById(\"cleartime\");
//===================show date===============================
date.onfocus=function(){//显示控件
var datel=this.getBoundingClientRect().left;
var datet=this.getBoundingClientRect().top+40;
box.style.left=datel+\"px\";
box.style.top=datet+\"px\";
box.style.display=\"block\";
};
con.onclick=function(event){
if(event.target.tagName==\"DIV\" && event.target.nodeType==\"1\" && hasclass(event.target.className,\"edate\")){
date.value=\"\";
date.value=dateObj.getFullYear()+\"-\"+toyear(dateObj)+\"-\"+event.target.innerHTML;
box.style.display=\"none\";
};
};
cleartime.onclick=function(event){
date.value=\"\";
};
//===================set year month===============================
//默认时间对象
var dateObj = new Date();
//动态控制
prevmonth.onclick=function(){//上一月
var ddm=null;
var ddy=null;
if((dateObj.getMonth()-1)==-1){
ddm=11;
ddy=dateObj.getFullYear()-1;
}else{
ddm=dateObj.getMonth()-1;
ddy=dateObj.getFullYear();
};
dateObj.setFullYear(ddy);
dateObj.setMonth(ddm);
omonth.innerHTML=toyear(dateObj)+\"月\";
oyear.innerHTML=dateObj.getFullYear()+\"年\";
remove();
oneweek=oneyearoneday(dateObj);
alld=alldays(dateObj);
nowd=nowday(dateObj);
init(oneweek,alld,nowd);
};
nextmonth.onclick=function(){//下一月
var ddm=null;
var ddy=null;
if((dateObj.getMonth()+1)==12){
ddm=0;
ddy=dateObj.getFullYear()+1;
}else{
ddm=dateObj.getMonth()+1;
ddy=dateObj.getFullYear();
};
dateObj.setFullYear(ddy);
dateObj.setMonth(ddm);
omonth.innerHTML=toyear(dateObj)+\"月\";
oyear.innerHTML=dateObj.getFullYear()+\"年\";
remove();
oneweek=oneyearoneday(dateObj);
alld=alldays(dateObj);
nowd=nowday(dateObj);
init(oneweek,alld,nowd);
};
prevyear.onclick=function(){//上一年
var ddy=dateObj.getFullYear()-1;
dateObj.setFullYear(ddy);
oyear.innerHTML=dateObj.getFullYear()+\"年\";
remove();
oneweek=oneyearoneday(dateObj);
alld=alldays(dateObj);
nowd=nowday(dateObj);
init(oneweek,alld,nowd);
};
nextyear.onclick=function(){//下一年
var ddy=dateObj.getFullYear()+1;
dateObj.setFullYear(ddy);
oyear.innerHTML=dateObj.getFullYear()+\"年\";
remove();
oneweek=oneyearoneday(dateObj);
alld=alldays(dateObj);
nowd=nowday(dateObj);
init(oneweek,alld,nowd);
};
//返回到今时今日
nowtime.onclick=function(){
var dddate=new Date();
var ddm=dddate.getMonth();
var ddy=dddate.getFullYear();
dateObj.setFullYear(ddy);
dateObj.setMonth(ddm);
omonth.innerHTML=toyear(dateObj)+\"月\";
oyear.innerHTML=dateObj.getFullYear()+\"年\";
remove();
oneweek=oneyearoneday(dateObj);
alld=alldays(dateObj);
nowd=nowday(dateObj);
init(oneweek,alld,nowd);
};
//年月获取
var year=dateObj.getFullYear();
var month=toyear(dateObj);//0是12月
//月年的显示
omonth.innerHTML=month+\"月\";
oyear.innerHTML=year+\"年\";
//===================set day===============================
//获取本月1号的周值
var oneweek=oneyearoneday(dateObj);
//本月总日数
var alld=alldays(dateObj);
//当前是几
var nowd=nowday(dateObj);
//初始化显示本月信息
init(oneweek,alld,nowd);
//===================function===============================
//有无指定类名的判断
function hasclass(str,cla){
var i=str.search(cla);
if(i==-1){
return false;
}else{
return true;
};
};
//初始化日期显示方法
function remove(){
con.innerHTML=\"\";
};
function init(oneweek,alld,nowd){
for(var i=1;i<=oneweek;i++){//留空
var eday=document.createElement(\"div\");
eday.innerHTML=\"\";
con.appendChild(eday);
};
for(var i=1;i<=alld;i++){//正常区域
var eday=document.createElement(\"div\");
if(i==nowd){
eday.innerHTML=i;
eday.className=\"now edate\";
con.appendChild(eday);
}else{
eday.innerHTML=i;
eday.className=\"edate\";
con.appendChild(eday);
};
};
};
//获取本月1号的周值
function oneyearoneday(dateObj){
var oneyear = new Date();
var year=dateObj.getFullYear();
var month=dateObj.getMonth();//0是12月
oneyear.setFullYear(year);
oneyear.setMonth(month);//0是12月
oneyear.setDate(1);
return oneyear.getDay();
};
//当前是几
function nowday(dateObj){
return dateObj.getDate();
};
//获取本月总日数方法
function alldays(dateObj){
var year=dateObj.getFullYear();
var month=dateObj.getMonth();
if(isLeapYear(year)){//闰年
switch(month) {
case 0: return \"31\"; break;
case 1: return \"29\"; break; //2月
case 2: return \"31\"; break;
case 3: return \"30\"; break;
case 4: return \"31\"; break;
case 5: return \"30\"; break;
case 6: return \"31\"; break;
case 7: return \"31\"; break;
case 8: return \"30\"; break;
case 9: return \"31\"; break;
case 10: return \"30\"; break;
case 11: return \"31\"; break;
default:
};
}else{//平年
switch(month) {
case 0: return \"31\"; break;
case 1: return \"28\"; break; //2月
case 2: return \"31\"; break;
case 3: return \"30\"; break;
case 4: return \"31\"; break;
case 5: return \"30\"; break;
case 6: return \"31\"; break;
case 7: return \"31\"; break;
case 8: return \"30\"; break;
case 9: return \"31\"; break;
case 10: return \"30\"; break;
case 11: return \"31\"; break;
default:
};
};
};
//闰年判断函数
function isLeapYear(year){
if( (year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)){
return true;
}else{
return false;
};
};
//月份转化方法
function toyear(dateObj){
var month=dateObj.getMonth()
switch(month) {
case 0: return \"1\"; break;
case 1: return \"2\"; break;
case 2: return \"3\"; break;
case 3: return \"4\"; break;
case 4: return \"5\"; break;
case 5: return \"6\"; break;
case 6: return \"7\"; break;
case 7: return \"8\"; break;
case 8: return \"9\"; break;
case 9: return \"10\"; break;
case 10: return \"11\"; break;
case 11: return \"12\"; break;
default:
};
};
};
</script>
</html>
希望本文所述对大家学习javascript程序设计有所帮助。
本文地址:https://www.stayed.cn/item/9806
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我