js實現日曆

2022-05-31 15:21:08 字數 1686 閱讀 2422

有這樣乙個普通的日曆需求

第一反應就是找外掛程式,結果找到了,但是改起來非常麻煩,然後查下實現的原理,發現原來很簡單,於是自己實現了乙個。

首先分析一下這個元件,每頁顯示的是

然後,神奇的date型別原來可以這樣獲取日期例項:

new date(2018,4,0)  // 2023年5月第一天的date例項

new date(2018,4,0) // 2023年4月最後一天的date例項

new date(2018,4,-1) // 2023年4月倒數第二天的date例項

new date(2018,4,32) // 2023年6月第一天的date例項

所以,可以這樣獲取每一頁的第一格的日期:

var monthfirstdate = new date(2018, 4-1, 1) // 假設現在是四月

var monthfirstday = monthfirstdate.getday() // 本月第一天是星期幾,星期日是0,星期一是1...

// 所以如果每行第乙個是星期日,則每一頁的第一格的日期:

var pagefirstdate = new date(2018, 4-1, 1-monthfirstday)

而本頁的下個月的日期的規律是

下個月第乙個星期天之前的日期

所以,可以這樣獲取一頁日曆所有日期的date例項

/**

* @function getcalendardata

* @param opts

* @return

*/function getcalendardata (opts)

var _day = opt.day || new date(), // date例項,不傳取今天

nowmonth = _day.getmonth(),

nowyear = _day.getfullyear(),

nowdate = _day.getdate()

var firstdate = new date(nowyear, nowmonth, 1), // 本月第一天

firstday = firstdate.getday(), // 本月第一天是星期幾

activenum = 1

var result =

// 例: new date(2018, 4, 0)結果是2023年3月31日,new date(2018, 4, -1)結果是2023年3月30日

while (!(isnextmonth(_day, new date(nowyear, nowmonth, activenum - firstday)) &&

new date(nowyear, nowmonth, activenum - firstday).getday() === 0))

function isnextmonth (a, b)

return result

}

再之後,不管你用拼接html字串還是用vue/react...,把上面的得出的date例項陣列迴圈一下,生成dom,加上css,渲染出你想要的日曆!

JS實現 簡易日曆

1.選項卡的實現 2.匿名函式 無名字的函式 屬性id.function 3.html檔案載入問題 在寫js的 如果js 中需要先載入html檔案之後才能獲取到值得話,必須把js 寫在指定標籤獲取值得後面.否則報錯或無法執行.由於js 嵌入在html標籤中,導致閱讀性差,以及一些其他問題,因此可以使...

js實現簡單的日曆

最終效果 我先寫了乙個js檔案,方便呼叫裡面的函式,內容如下 此函式使時間按照指定的字串樣式輸出 date是當前的系統時間 function dateformat date,str 獲取當前月份一共有多少天 function getdays date 獲取當月第一天是星期幾 function fir...

js實現日曆的簡單演算法

最近有用到日曆可需要編輯文字的日曆,為了繫結資料的方便,所以用js寫了一套日曆,其實思想也是很簡單。實現步驟如下 1 首先取得處理月的總天數 js不提供此引數,我們需要計算。考慮到閏年問題會影響二月份的天數,我們先編寫乙個判斷閏年的自編函式 function is leap year 2 接著定義乙...