周末练手-js写的小日历

周末花几个小时写的一个小日历,也是js入门级别的,刚开始学习的朋友可以借鉴:

实现的思路:

1、搭建窗体,自己想要实现什么样的效果,在写之前一定要有一个清晰的思路

2、一个一个功能的添加,实现,不要急,一个做好了,在做下一个

3、写日历,打印日历,之前用java语言写过,是在控制台输出比较好控制,在网页里面,并且是在一个div里面要实现这种效果,大家就需要多花点时间了,因为日历是有换行的,不是一直到底,该用什么去显示我们的日期,然后又该怎么去换行

我这里是用到了,DOM在div添加ul,然后在再在ul里面循环添加li,再用css控制width、height属性

 

都是简单的东西,直接上代码:

html代码:

ps:这是div搭建的,如果大家只需要后面的日历,可以把前面div删掉就行了

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5 <title>日历</title>
  6 <style type="text/css">
  7 #xingqi{ text-align:center;}
  8 #xingqi ul{ width:450px; height:30px; text-align:center; line-height:30px; margin:0px; padding:0px;} 
  9 #xingqi ul li{ float:left; list-style-type:none; width:62px; height:30px; font-weight:bold;}
 10 
 11 #show_rili{width:450px; height:270px;background-color:#fff; float:left;}
 12 #show_rili ul{ width:450px; height:52px; text-align:center; line-height:52px; margin:0px; padding:0px;} 
 13 #show_rili ul li{ float:left; list-style-type:none; width:62px; height:52px; border:1px solid #9F3; font-size:20px;}
 14 </style>
 15 
 16 </head>
 17 
 18 <body onload="time(),show()">
 19 <div id="content" style="width:450px; height:370px; border:1px solid #999; margin:0px auto;">
 20 <div style="width:450px; height:100px; border:1px solid #9C0; float:left;">
 21 <!--显示日期,动态时间显示-->
 22 <div id="show_time" style="width:450px; height:30px; float:left;  background-color:#CFC;">
 23 <!--显示当前日期-->
 24 <div style=" width:250px; height:25px; float:left; text-align:center; padding-top:5px;">
 25 <a href="#" title="点击返回今天日期" style="text-decoration:none; color:#000" onclick="fanhui()"><label>今天日期:</label><span id="date"></span></a>
 26 </div>
 27 <!--显示当前日期结束-->
 28 <!--动态显示时间-->
 29 <div style="width:200px; height:25px; float:left; text-align:center; padding-top:5px;">
 30 <label>当前时间:</label><span id="dong_time"></span>
 31 </div>
 32 <!--动态显示时间结束-->
 33 </div>
 34 <!--显示日期,动态时间显示结束-->
 35 <!--选择年月日-->
 36 <div style="width:450px; height:30px; background-color:#fff; float:left; text-align:center; padding-top:10px;">
 37 <select id="year">
 38 <script type="text/javascript">
 39 var date=new Date();
 40 var year=date.getFullYear();
 41 for(var i=1900;i<=2099;i++){
 42     if(i==year){
 43         document.write("<option selected='selected' value='"+year+"'>"+year+"</option>");
 44     }else{
 45         document.write("<option value='"+i+"'>"+i+"</option>");
 46     }    
 47 }
 48 </script>
 49 </select> 50 <select  id="month">
 51 <script type="text/javascript">
 52 var date=new Date();
 53 var month=date.getMonth()+1;
 54 for(var i=1;i<=12;i++){
 55     if(i==month){
 56         document.write("<option selected value='"+month+"'>"+month+"</option>");
 57     }else{
 58         document.write("<option value='"+i+"'>"+i+"</option>");
 59     }    
 60 }
 61 </script>
 62 </select> 63 <input type="button" value="显示日历" onclick="show()"/>
 64 </div>
 65 <!--选择年月日结束-->
 66 <!--星期-->
 67 <div id="xingqi" style="width:450px; height:30px; background-color:#FC0; float:left;">
 68 <ul>
 69 <li></li>
 70 <li></li>
 71 <li></li>
 72 <li></li>
 73 <li></li>
 74 <li></li>
 75 <li></li>
 76 </ul>
 77 </div>
 78 <!--星期结束-->
 79 </div>
 80 <!--日历显示区-->
 81 <div id="show_rili">
 82 <!--<script type="text/javascript">
 83 var date=new Date();
 84 var year=date.getFullYear();
 85 var month=date.getMonth()+1;
 86 var day=date.getDate();
 87 var sumDay=0;
 88 //从1900到今天一共多少天
 89 //年
 90 for(var i=1900;i<year;i++){
 91     //判断闰年和平年
 92     if((i%4==0&&i%100!==0)||(i%400==0)){
 93         sumDay+=366;    
 94     }else{
 95         sumDay+=365;    
 96     }
 97 }
 98 //月
 99 for(var i=1;i<month;i++){
100     if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
101         sumDay+=31;    
102     }else if(i==2){
103         if((year%4==0&&year%100!==0)||(year%400==0)){
104             sumDay+=29;    
105         }else{
106             sumDay+=28;    
107         }
108     }else{
109         sumDay+=30;    
110     }
111 }
112 //算出输入年-月-1是星期几
113 sumDay+=1;
114 var weekDay=sumDay%7;
115 //将在这之前的星期输出空
116 //在添加ul标签
117 document.write("<ul>");
118 for(var i=0; i<weekDay; i++){
119     document.write("<li>"+"&nbsp;"+"</li>");    
120 }
121 //判断现在的月份有多少天
122 var monthDay=0;  
123 if(month==2){
124     if((year%4==0&&year%100!=0)||year%400==0){
125         monthDay=29;
126     }else{
127         monthDay=28;
128     }
129 }else if(month==4||month==6||month==9||month==11){   //小月30天
130     monthDay=30;
131 }else{  //大月31天
132     monthDay=31;
133 }
134 //输出所有日历
135 for(var i=1;i<=monthDay;i++){
136     if(sumDay%7==6){
137         document.write("<li id='li"+i+"'>"+i+"</li>"+"<br />");    
138     }else{
139         document.write("<li id='li"+i+"'>"+i+"</li>");    
140     }
141     sumDay++;
142 }
143 //让今天的日背景高亮显示
144 var li=document.getElementsByTagName("li");
145 for(var i=1; i<=monthDay; i++){
146     if(document.getElementById("li"+i).innerHTML==day){
147         document.getElementById("li"+i).style.backgroundColor="#FC0";
148     }
149 }
150 document.write("</ul>");
151 
152 </script>-->
153 </div>
154 <!--日历显示区结束-->
155 </div>
156 
157 </body>
158 </html>

 

js代码:代码不多

  1 <script type="text/javascript">
  2 //动态显今天的日期时间
  3 var date=new Date();
  4 //当前的年月日
  5 var y=date.getFullYear();
  6 var m=date.getMonth()+1;
  7 var d=date.getDate();
  8 
  9 function time(){
 10     //今天日期
 11     document.getElementById("date").innerHTML=date.toLocaleDateString();
 12     var time=new Date();
 13     var hour=time.getHours();
 14     var miu=time.getMinutes();
 15     var sec=time.getSeconds();
 16     document.getElementById("dong_time").innerHTML=hour+":"+miu+":"+sec+"";
 17     setTimeout("time()",1000);
 18     }
 19 
 20 //清空显示日历的div
 21 function clickDiv(){
 22     document.getElementById("show_rili").innerHTML="";
 23 }
 24 
 25 //返回当前天的日历
 26 function fanhui(){
 27     document.getElementById("year").value=y;
 28     document.getElementById("month").value=m;
 29     //显示日历
 30     show();
 31 }
 32 
 33 //显示时间
 34 function show(){
 35     clickDiv();
 36     
 37     var oDiv=document.getElementById("show_rili");
 38     var ul=document.createElement("ul");
 39     oDiv.appendChild(ul);
 40     var li=new Array();  //声明li数组
 41     
 42     //获取下拉列表的年月
 43     var year=document.getElementById("year").value;
 44     var month=document.getElementById("month").value;
 45     //当前的年月日
 46     var date=new Date();
 47     var y=date.getFullYear();
 48     var m=date.getMonth()+1;
 49     var d=date.getDate();
 50 
 51     var sumDay=0; //总天数
 52     //从1900到今天一共多少天
 53     //
 54     for(var i=1900;i<year;i++){
 55         //判断闰年和平年
 56         if((i%4==0&&i%100!==0)||(i%400==0)){
 57             sumDay+=366;    
 58         }else{
 59             sumDay+=365;    
 60         }
 61     }
 62     //
 63     for(var i=1;i<month;i++){
 64         if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
 65             sumDay+=31;    
 66         }else if(i==2){
 67             if((year%4==0&&year%100!==0)||(year%400==0)){
 68                 sumDay+=29;    
 69             }else{
 70                 sumDay+=28;    
 71             }
 72         }else{
 73             sumDay+=30;    
 74         }
 75     }
 76     //算出输入年-月-1是星期几
 77     sumDay+=1;
 78     var weekDay=sumDay%7;
 79     //将在这之前的星期输出空
 80     //在添加ul标签
 81     for(var i=0; i<weekDay; i++){
 82         li[i]=document.createElement("li");
 83         ul.appendChild(li[i]);        
 84     }
 85     //判断现在的月份有多少天
 86     var monthDay=0;  
 87     if(month==2){
 88         if((year%4==0&&year%100!=0)||year%400==0){
 89             monthDay=29;
 90         }else{
 91             monthDay=28;
 92         }
 93     }else if(month==4||month==6||month==9||month==11){   //小月30天
 94         monthDay=30;
 95     }else{  //大月31天
 96         monthDay=31;
 97     }
 98     //输出所有日历
 99     for(var i=1;i<=monthDay;i++){
100         if(sumDay%7==6){
101             li[i]=document.createElement("li");
102             li[i].innerHTML=i;
103             li[i].id="li"+i;
104             ul.appendChild(li[i]);
105         }else{
106             li[i]=document.createElement("li");
107             li[i].innerHTML=i;
108             li[i].id="li"+i;
109             ul.appendChild(li[i]);
110         }
111         sumDay++;
112     }//for
113     //让当前天的日背景高亮显示
114     var li=document.getElementsByTagName("li");
115     for(var i=1; i<=monthDay; i++){
116         if(year==y&&month==m&&document.getElementById("li"+i).innerHTML==d){
117             document.getElementById("li"+i).style.backgroundColor="#FC0";
118         }
119     }//for
120 }
121 
122 </script>

欢迎各位留言讨论,谢谢!

转载于:https://www.cnblogs.com/qiang2016/p/5374194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值