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