关于JavaScript的日历组件,网上百度一大堆,Bootstrap的Daterpicker比较全面,比较不错;不过要用上的话,依赖文件比较多,我有些代码洁癖的,so,我得研究研究到底用不用;
经研究发现,万年历,无论要怎么切换,归根到底其实就是一个方法的事,抱着积极的码农乐观主义精神,我必须和大家分享下;只要这一个方法,包你能扩展出你想要的、百度得到的各种日历组件;
少废话了,上代码:
1 function Dater(y,m,d) { 2 var date=new Date(); 3 var y=y||date.getFullYear(), 4 m=m||date.getMonth()+1, 5 d=d||date.getDate(); 6 var isLeapYear=function(years){ 7 return (years % 4 == 0 && years % 100 != 0) || (years % 400 == 0)?true:false; 8 } 9 var getFirstDay=function(y,m,d){ 10 var d=new Date(y,m,d); 11 d.setDate(1); 12 return d.getDay(); 13 } 14 var getMonthDay=[31,isLeapYear(y)?29:28,31,30,31,30,31,31,30,31,30,31]; 15 var prem=[],im=[],nextm=[],lastmd=getMonthDay[m-1-1]; 16 17 if (getFirstDay(y,m-1,d)==0) { 18 for (var i = 6; i >=0; i--) { 19 prem[6-i]=lastmd-i; 20 } 21 }else { 22 for (var i = getFirstDay(y,m-1,d); i >0; i--) { 23 prem[getFirstDay(y,m-1,d)-i]=lastmd-i+1; 24 } 25 } 26 for (var i = 0; i < getMonthDay[m-1]; i++) { 27 im[i]=i+1; 28 } 29 var nextlen=42-(prem.length+getMonthDay[m-1]); 30 for (var i = 0; i < nextlen; i++) { 31 nextm[i]=i+1; 32 } 33 this.monthDays={ 34 preMonthDays:prem, 35 thisMonthDays:im, 36 nextMonthDays:nextm 37 } 38 }; 39 console.log(new Dater(2015,2,1).monthDays);
纯纯的JavaScript,无任何依赖;
可能大家看出来了,这尼玛返回了三个数组,和日历毛关系啊;不要急,把这三个数组拼起来,点一下你电脑右下角的时间,对着看下就知道了;是不是能对应上了?
然后你可以随便自定义样式,各种切换什么的,只需要循环一个6*7的日历模板即可,传入该方法年月日,就妥妥的;
时间: 2024-10-28 20:53:06