寫日歷的時候第一個糾結地方是用ul li 還是直接用table,兩種方式都試了一下,還是選擇了ul li,講真table有時候不太好操作。
開始js吧。第一點,簡單的標題,周日 周一。。。。這個順序是以‘周日’開始還是‘周一’,在后面會有影響的。
var weekName = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
定義個數組來存吧。
這些都是准備好的東西,當然代碼有點坑,寫得比較爛,也沒有改改。
然后我們再for循環來存weekName
后面就是日期代碼了,首先獲取當前時間,用來獲得當前年,月
var currentDate = new Date();
var currentYear = time.getFullYear(), currentMonth = time.getMonth();//獲取當前年、月
然后我們就要想,每個月多少天這個肯定得獲取到,但是Date沒有直接提供接口讓我們獲取,然后2月的天數也是不固定的,於是通過年來判斷天數,並且定義個數組來存放每個月的天數。
獲取到這個,我們還得得到一個重要的東西,每個月的開始是星期幾,還好我們能根據getDay()來得到
var initDate = new Date(currentYear, currentMonth, 1);
var firstDay = initDate.getDay();//獲取當前月第一天是周幾0、1、2、3、4....
隨后我們得循環輸出日歷,可是我們要怎么開始,我們想,若第一天是周日對應的firstDay是0,那么我們應該是1號,若是周一則firstDay是1以此類推會加一
於是會 var date_str = i - firstDay + 1; i是for循環的N值
本日歷是固定的6行,若有不同需求自行判斷。且忽略ul li什么什么的。。。
至此,基本就完成了。
再加兩個上一個月,下一個月方法,注意月份的正確性,因為我這里要傳函數里再取一次,所以下一個月的時候得多加一個月,相反,上一個月不用變就好