学写js Calender控件

好几个月没写博客了,一直在赶项目。项目现在终于处于稳定的状态,只是修修改改。作为后台程序员的我真是苦逼啊,从web到手机端接口我都得写,杂七杂八的事情。。。这两天终于闲下来了,没事儿看了一下关于js日期的一些函数,突然想到了日历控件,于是试着写了一个,作为后台程序员的我水平有限,大家抱着学习的态度看看我写的这个例子吧。。。

首先一个常用的日期函数:Date(year,month,day)

var   date=new  Date();

获取年份
            var   year=this.date.getFullYear();

获取月份,这里是月索引所以要+1
            var   month=this.date.getMonth()+1;

获取当天是几号
            var   day=this.date.getDate();

获取当天是周几,返回0.周日   1.周一  2.周二  3.周三  4.周四  5.周五  6.周六
            var   week=this.date.getDay();

获取当月一号是周几

var     getWeekDay=function(year,month,day){
            var  date=new Date(year,month,day);
            return  date.getDay();
           }

获取当月的天数
         var  getMonthDays=function(year,month){
            var  date=new Date(year,month,0);
            return  date.getDate();
        }
        var   monthdays= this.getMonthDays(this.year,this.month);

好了,我们用到的参数就这么多,后面其实就是关于日期对应周几的一些操作和判断,动态的拼接标签,下面就直接把我写的例子发出来:

  1 <html>
  2 <meta  http-equiv="content-type" content="text/html;charset=utf-8">
  3 <head>
  4     <style type="text/css">
  5
  6 td{ text-align: center;}
  7     </style>
  8     <script type="text/javascript">
  9
 10 window.onload=function(){
 11     var   Calender=function(){
 12         this.Init.apply(this,arguments);
 13     }
 14     Calender.prototype={
 15         Init:function(){
 16             this.date=new  Date();
 17             this.year=this.date.getFullYear();
 18             this.month=this.date.getMonth()+1;
 19             this.day=this.date.getDate();
 20             this.week=this.date.getDay();
 21             this.weekstart=this.getWeekDay(this.year, this.month-1, 1);
 22             this.monthdays= this.getMonthDays(this.year,this.month);
 23         },
 24         getMonthDays:function(year,month){
 25             var  date=new Date(year,month,0);
 26             return  date.getDate();
 27         },
 28         getWeekDay:function(year,month,day){
 29             var  date=new Date(year,month,day);
 30             return  date.getDay();
 31         },
 32         View:function(){
 33             var  tablestr=‘<tr><td colspan="3"></td><td>年:‘+this.year+‘</td><td colspan="3">月:‘+this.month+‘</td></tr>‘;
 34             tablestr+=‘<tr><td width="14%">日</td><td width="14%">一</td><td width="14%">二</td><td width="14%">三</td><td width="14%">四</td><td width="14%">五</td><td width="14%">六</td></tr>‘;
 35             var  index=1;
 36             //判断每月的第一天在哪个位置
 37             var  style=‘‘;
 38             if(this.weekstart<7)
 39             {
 40                 tablestr+=‘<tr>‘;
 41                  for (var i = 0; i <this.weekstart; i++) {
 42                      tablestr+=‘<td></td>‘;
 43                  };
 44                  for (var i = 0; i < 7-this.weekstart; i++) {
 45                     style=this.day==(i+1)?"background-Color:green;":"";
 46                      index++;
 47                      tablestr+=‘<td style="‘+style+‘" val=‘+(this.year+‘-‘+this.month+‘-‘+(i+1))+‘>‘+(i+1)+‘</td>‘;
 48                  };
 49                 tablestr+=‘</tr>‘;
 50
 51             }
 52             ///剩余天数对应的位置
 53
 54             //判断整数行并且对应相应的位置
 55             var  remaindays=this.monthdays-(7-this.weekstart);
 56             var  row=Math.floor(remaindays%7==0?remaindays/7:((remaindays/7)+1))  ;
 57             var   count=Math.floor(remaindays/7);
 58             for (var i = 0; i < count; i++) {
 59                  tablestr+=‘<tr>‘;
 60                  for (var k = 0; k < 7; k++) {
 61                       style=this.day==(index+k)?"background-Color:green;":"";
 62                       tablestr+=‘<td style="‘+style+‘" val=‘+(this.year+‘-‘+this.month+‘-‘+(index+k))+‘>‘;
 63                       tablestr+=index+k;
 64                       tablestr+=‘</td>‘;
 65                  };
 66                  tablestr+=‘</tr>‘;
 67                  index+=7;
 68             };
 69
 70             //最后剩余的天数对应的位置(不能填充一周的那几天)
 71             var  remaincols=this.monthdays-(index-1);
 72             tablestr+=‘<tr>‘;
 73             for (var i = 0; i < remaincols; i++) {
 74                 style=this.day==index?"background-Color:green;":"";
 75                 tablestr+=‘<td style="‘+style+‘" val=‘+(this.year+‘-‘+this.month+‘-‘+(index))+‘>‘;
 76                 tablestr+=index;
 77                 tablestr+=‘</td>‘;
 78                 index++;
 79             };
 80             tablestr+=‘</tr>‘;
 81
 82             return  tablestr;
 83         },
 84         Render:function(){
 85            var  table=document.createElement(‘table‘);
 86            table.style.border=‘1px  solid green‘;
 87            table.style.width=‘400px‘;
 88            table.style.height=‘auto‘;
 89            table.style.cursor=‘pointer‘;
 90            table.style.backgroundColor=‘lightgrey‘;
 91            table.onclick=function(e){
 92                 var  evt=e||window.event;
 93                 var   target=evt.srcElement||evt.target;
 94
 95                 if(target&&target.getAttribute(‘val‘))
 96                 {
 97
 98                     alert(target.getAttribute(‘val‘));
 99                 }
100
101            }
102             var  tablestr=this.View();
103             this.tablestr=tablestr;
104             table.innerHTML=tablestr;
105             var  div=document.createElement(‘div‘);
106             div.style.width=‘auto‘;
107             div.style.height=‘auto‘;
108              div.appendChild(table);
109
110              ///翻页div
111             var  pagerDiv=document.createElement(‘div‘);
112             pagerDiv.style.width=‘auto‘;
113             pagerDiv.style.height=‘auto‘;
114
115                var  that=this;
116
117
118                ///重新设置参数
119             var    resetPara=function(year,month,day){
120                     that.date=new  Date(year,month,day);
121                     that.year=that.date.getFullYear();
122                     that.month=that.date.getMonth()+1;
123                     that.day=that.date.getDate();
124                     that.week=that.date.getDay();
125                     that.weekstart=that.getWeekDay(that.year, that.month-1, 1);
126                     that.monthdays= that.getMonthDays(that.year,that.month);
127             }
128
129             //上一页
130             var  preBtn=document.createElement(‘input‘);
131              preBtn.type=‘button‘;
132              preBtn.value=‘<‘;
133
134               preBtn.onclick=function(){
135                      document.body.removeChild(div);
136                      resetPara(that.year,that.month-2,that.day);
137                      that.Render();
138
139              }
140              //下一页
141               var  nextBtn=document.createElement(‘input‘);
142              nextBtn.type=‘button‘;
143              nextBtn.value=‘>‘;
144
145              nextBtn.onclick=function(){
146                      document.body.removeChild(div);
147                      resetPara(that.year,that.month,that.day);
148                      that.Render();
149
150              }
151
152              pagerDiv.appendChild(preBtn);
153              pagerDiv.appendChild(nextBtn);
154              div.appendChild(pagerDiv);
155
156              var  dropDiv=document.createElement(‘div‘);
157              var    dropdivstr=‘‘;
158              //选择年份
159               dropdivstr+=‘<select id="ddlYear">‘;
160               for (var i = 1900; i <= 2100; i++) {
161                 dropdivstr+=
162                 i==that.year
163                 ?‘<option  value="‘+i+‘" selected="true">‘+i+‘</option>‘
164                 : ‘<option  value="‘+i+‘">‘+i+‘</option>‘;
165               };
166              dropdivstr+=‘</select>‘;
167
168            //选择月份
169             dropdivstr+=‘<select id="ddlMonth">‘;
170               for (var i = 1; i <= 12; i++) {
171                 dropdivstr+=
172                 i==that.month
173                 ?‘<option  value="‘+i+‘" selected="true">‘+i+‘</option>‘
174                 : ‘<option  value="‘+i+‘">‘+i+‘</option>‘;
175               };
176              dropdivstr+=‘</select>‘;
177              dropDiv.innerHTML=dropdivstr;
178              div.appendChild(dropDiv);
179             document.body.appendChild(div);
180
181
182              ///绑定选择年份和月份的事件
183              var  ddlYear=document.getElementById(‘ddlYear‘);
184              var  ddlMonth=document.getElementById(‘ddlMonth‘);
185
186              ddlYear.onchange=function(){
187                  var   yearIndex=ddlYear.selectedIndex;
188                  var  year=ddlYear.options[yearIndex].value;
189                  var   monthIndex=ddlMonth.selectedIndex;
190                  var  month=ddlMonth.options[monthIndex].value;
191                 document.body.removeChild(div);
192                 resetPara(year,month-1,that.day);
193                 that.Render();
194             }
195
196              ddlMonth.onchange=function(){
197                  var   yearIndex=ddlYear.selectedIndex;
198                  var  year=ddlYear.options[yearIndex].value;
199                  var   monthIndex=ddlMonth.selectedIndex;
200                  var  month=ddlMonth.options[monthIndex].value;
201                 document.body.removeChild(div);
202                 resetPara(year,month-1,that.day);
203                 that.Render();
204
205             }
206         }
207
208     }
209
210
211     var   calender=new  Calender();
212     calender.Render();
213
214 }
215     </script>
216
217
218 </head>
219 <body>
220
221 </body>
222 </html>

上面代码有简单说明,功能是最基础的,如果更深入的做可以进行扩展,如有疑问或者要交流的东西请加qq546558309  ,或者发到我的邮箱[email protected]

学写js Calender控件

时间: 2024-08-23 23:14:07

学写js Calender控件的相关文章

C#写COM组件,JS调用控件

1.c#2005中新建项目,类型为类库,项目名为AddCom确定. 配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)” 2.打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用 3.编写com组件会用到guid(全球唯一ID),编写com组件必须要用到.c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,

JS日历控件 灵活设置: 精确的时分秒.

在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时只支持 年月日 的日历控件,现在优化如下: 1. 在原基础上 支持 yyyy-mm-dd 的年月日的控件. 2. 在原基础上增加支持 yyyy-mm-dd HH:MM 年月日时分的控件. 3. 在原基础上增加支持 yyyy-mm-dd HH:MM:SS 年月日时分秒的控件. 4. 增加确定按钮 及 今天 和关闭按钮.当我切换到其他年份的时候,我点击 "今天"按钮 就可以返回当前的年月份. 配置项如下:

js日历控件源代码下载

原文:js日历控件源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463462640640.htm js写的日历控件,具体看效果吧,简单截图如下:

JS日历控件优化(增加时分秒)

JS日历控件优化 在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时只支持 年月日 的日历控件,现在优化如下: 1. 在原基础上 支持 yyyy-mm-dd 的年月日的控件. 2. 在原基础上增加支持 yyyy-mm-dd HH:MM 年月日时分的控件. 3. 在原基础上增加支持 yyyy-mm-dd HH:MM:SS 年月日时分秒的控件. 4. 增加确定按钮 及 今天 和关闭按钮.当我切换到其他年份的时候,我点击 "今天"按钮 就可以返回当前的年月

如何使用js日历控件

在做注册表单的时候,了解了如何使用js日历控件 <script language=javascript src="calendar5.js"></script> <script type="text/javascript">var c = new Calendar("c");//new个对象document.write(c);//这个得有,不然日历显示不出来 window.onload = function()

layDate1.0正式发布,您一直在寻找的的js日期控件

你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器.她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘.layDate延续了layui一贯的简单与易用,本着资源共享的开发者精神和对网页日历交互的无穷追求,她将长年被维护和更新,

(转)JS报表控件highcharts应用

1. 官网地址 http://www.highcharts.com/ 2. 版权信息源码修改方法 在 highcharts.js 中打到 credits 将其中的 enabled 属性由 true 改为 false.如果是经过压缩后的代码,则是由 !0 改为 0. 3. 官方学习示例地址 http://www.highcharts.com/studies/ 4. 官方API http://api.highcharts.com/highcharts 5. 常用参数配置说明 chart.events

简洁JS 日历控件 支持日期和月份选择

原文出处 以下这个JS日历控件是我的闲暇之余自己编写的,所有的代码全部在IE7/IE8/Firefox下面测试通过, 而且可以解决被iframe层遮盖的问题.现在只提供两种风格(简洁版和古典版)和两种语言(英文和中文).支持自定义日期格式,设定时间范围. 默认为古典版,英文,下面来看简单的缩略图. 首先是简洁版: 日期选择器: 月份选择器: 然后是古典版: 日期选择器: 日期选择器中文语言 月份选择器 下面是使用方法: 在要使用这个控件的页面上引入这个JS <script type="te

简洁js日历控件的使用

往Web工程添加纯js日历控件 在网上找到了DatePicker.js(http://www.cnblogs.com/shenyixin/archive/2013/03/11/2954156.html),就试一试是否要用. 第一步:web 工程中新建js文件,名字就叫DatePicker.js 第二步:在html标签中使用,使用方法可参考上面链接的说明. <%@ page language="java" contentType="text/html; charset=U