簡(jiǎn)單JavaScript日歷及詳細(xì)說明
更新時(shí)間:2010年07月27日 09:17:23 作者:
HTML和CSS樣式可以自行修改,但是整體不做太大改變的情況下.直接待用calendar類,并且使用init方法,把日歷HTML的id調(diào)入即可
效果圖:

測(cè)試代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
[程序說明]主要為calendar類,里面的方法說明有:
getFirstDay:獲取每個(gè)月第一天再星期幾
getMonthLen:獲取當(dāng)月總共有多少天
createCalendar:創(chuàng)建日歷方法
clearCalendar:清空TABLE方法
init:運(yùn)行方法
[方法介紹]
getFirstDay中主要用了new Date()的getDay()方法,該方法是用于獲取日期所在星期幾.
但有一個(gè)特別需要注意的地方,就是getDay()方法所獲取的星期數(shù)如下:
星期日為0,星期一為1,星期二為2,星期三為3,星期四為4,星期五為5,星期六為6
getMonthLen方法用于獲取當(dāng)月的天數(shù),也就是目標(biāo)為獲取當(dāng)月最后一天的日期即可.
所以思維是獲取下個(gè)月第一天的0時(shí),然后減去3個(gè)小時(shí)就可以得到當(dāng)月天數(shù).
nextMonth.setHours(nextMonth.getHours() - 3);
減去3小時(shí)的原因參考<<DHTML Cookbook>>是這樣說的:三個(gè)小時(shí)的修正用于處理在月份中包含了夏季時(shí)間到冬季時(shí)間的轉(zhuǎn)換時(shí)發(fā)生的日期計(jì)算的異常現(xiàn)象.
但這解釋我也不太理解,所以就直接按照巨人的做法做了,若果有人知道該異?,F(xiàn)象是怎么回事,可以告訴我.
而該方法主要用了Date的setHours()和getDate()方法,分別用于獲得小時(shí)數(shù)和天數(shù).
createCalendar創(chuàng)建日歷的方法,由于我自身本來寫好了HTML代碼,所以不直接用DOM來生成,這里主要是寫入日期數(shù).
寫入日期的主要過程為:
for(var i = 1;i <= monthLen;i++){
calendar.dayTable[i+firstDay-1].innerHTML = i;
}
monthLen為getMonthLen()方法所獲取的當(dāng)月長(zhǎng)度,循環(huán)過程不應(yīng)該超過該長(zhǎng)度.
firstDay則由getFirstDay()方法獲得第一天的星期值,只要i+firstDay就可以得到開始第一天所在日歷單元格的位置,但由于數(shù)組從0開始,所以另外減去1.
在for循環(huán)插入值的過程中并判斷今天的日期,并為今天加入一個(gè)特別的id="today",代碼如下:
if((i+firstDay-2) == new Date().getDate() && calendar.month == new Date().getMonth() && calendar.year == new Date().getFullYear()){
calendar.dayTable[i+firstDay-1].id = 'today';
}
clearCalendar方法則用來每次換月的過程中,清空日歷,主要由for循環(huán)執(zhí)行,過程比較簡(jiǎn)單,所以不多詳細(xì)介紹.
另外特別說明2個(gè)單擊事件,都是換月作用,其中為向前一個(gè)月和向后一個(gè)月:
preMon.onclick = function(){
calendar.createCalendar(form,new Date(calendar.year,calendar.month-1,1));
}
nextMon.onclick = function(){
calendar.createCalendar(form,new Date(calendar.year,calendar.month+1,1));
}
由于把整體的year和month設(shè)置為calendar的屬性,所以只需在過程中對(duì)其月份進(jìn)行加減即可.
其中由于在onclick事件中,所以this分別指向preMon和nextMon,所以在內(nèi)部不使用this,直接使用calendar.在createCalendar不使用this也是這個(gè)原因.
[使用說明]
HTML和CSS樣式可以自行修改,但是整體不做太大改變的情況下.直接待用calendar類,并且使用init方法,把日歷HTML的id調(diào)入即可,如下:
calendar.init(calendars);
在整個(gè)過程中,需要注意的就是getFirstDay()和getMonthLen()方法的思維,只要了解了主要的部分.輸入日期的方法可以有很多.
改程序還有許多需要改進(jìn)的地方,希望大家給點(diǎn)意見.~`尤其是在代碼里面,有哪些地方需要注意的,本人寫的代碼不太多,所以希望各位給與批評(píng),然后我能發(fā)現(xiàn)錯(cuò)誤進(jìn)行改正.

測(cè)試代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
[程序說明]主要為calendar類,里面的方法說明有:
getFirstDay:獲取每個(gè)月第一天再星期幾
getMonthLen:獲取當(dāng)月總共有多少天
createCalendar:創(chuàng)建日歷方法
clearCalendar:清空TABLE方法
init:運(yùn)行方法
[方法介紹]
getFirstDay中主要用了new Date()的getDay()方法,該方法是用于獲取日期所在星期幾.
但有一個(gè)特別需要注意的地方,就是getDay()方法所獲取的星期數(shù)如下:
星期日為0,星期一為1,星期二為2,星期三為3,星期四為4,星期五為5,星期六為6
getMonthLen方法用于獲取當(dāng)月的天數(shù),也就是目標(biāo)為獲取當(dāng)月最后一天的日期即可.
所以思維是獲取下個(gè)月第一天的0時(shí),然后減去3個(gè)小時(shí)就可以得到當(dāng)月天數(shù).
nextMonth.setHours(nextMonth.getHours() - 3);
減去3小時(shí)的原因參考<<DHTML Cookbook>>是這樣說的:三個(gè)小時(shí)的修正用于處理在月份中包含了夏季時(shí)間到冬季時(shí)間的轉(zhuǎn)換時(shí)發(fā)生的日期計(jì)算的異常現(xiàn)象.
但這解釋我也不太理解,所以就直接按照巨人的做法做了,若果有人知道該異?,F(xiàn)象是怎么回事,可以告訴我.
而該方法主要用了Date的setHours()和getDate()方法,分別用于獲得小時(shí)數(shù)和天數(shù).
createCalendar創(chuàng)建日歷的方法,由于我自身本來寫好了HTML代碼,所以不直接用DOM來生成,這里主要是寫入日期數(shù).
寫入日期的主要過程為:
for(var i = 1;i <= monthLen;i++){
calendar.dayTable[i+firstDay-1].innerHTML = i;
}
monthLen為getMonthLen()方法所獲取的當(dāng)月長(zhǎng)度,循環(huán)過程不應(yīng)該超過該長(zhǎng)度.
firstDay則由getFirstDay()方法獲得第一天的星期值,只要i+firstDay就可以得到開始第一天所在日歷單元格的位置,但由于數(shù)組從0開始,所以另外減去1.
在for循環(huán)插入值的過程中并判斷今天的日期,并為今天加入一個(gè)特別的id="today",代碼如下:
if((i+firstDay-2) == new Date().getDate() && calendar.month == new Date().getMonth() && calendar.year == new Date().getFullYear()){
calendar.dayTable[i+firstDay-1].id = 'today';
}
clearCalendar方法則用來每次換月的過程中,清空日歷,主要由for循環(huán)執(zhí)行,過程比較簡(jiǎn)單,所以不多詳細(xì)介紹.
另外特別說明2個(gè)單擊事件,都是換月作用,其中為向前一個(gè)月和向后一個(gè)月:
preMon.onclick = function(){
calendar.createCalendar(form,new Date(calendar.year,calendar.month-1,1));
}
nextMon.onclick = function(){
calendar.createCalendar(form,new Date(calendar.year,calendar.month+1,1));
}
由于把整體的year和month設(shè)置為calendar的屬性,所以只需在過程中對(duì)其月份進(jìn)行加減即可.
其中由于在onclick事件中,所以this分別指向preMon和nextMon,所以在內(nèi)部不使用this,直接使用calendar.在createCalendar不使用this也是這個(gè)原因.
[使用說明]
HTML和CSS樣式可以自行修改,但是整體不做太大改變的情況下.直接待用calendar類,并且使用init方法,把日歷HTML的id調(diào)入即可,如下:
calendar.init(calendars);
在整個(gè)過程中,需要注意的就是getFirstDay()和getMonthLen()方法的思維,只要了解了主要的部分.輸入日期的方法可以有很多.
改程序還有許多需要改進(jìn)的地方,希望大家給點(diǎn)意見.~`尤其是在代碼里面,有哪些地方需要注意的,本人寫的代碼不太多,所以希望各位給與批評(píng),然后我能發(fā)現(xiàn)錯(cuò)誤進(jìn)行改正.
您可能感興趣的文章:
- js Canvas實(shí)現(xiàn)的日歷時(shí)鐘案例分享
- js css+html實(shí)現(xiàn)簡(jiǎn)單的日歷
- JavaScript制作簡(jiǎn)單的日歷效果
- javascript實(shí)現(xiàn)的淘寶旅行通用日歷組件用法實(shí)例
- javascript實(shí)現(xiàn)帶節(jié)日和農(nóng)歷的日歷特效
- 修改js Calendar日歷控件 兼容IE9/谷歌/火狐
- javascript實(shí)現(xiàn)日歷控件(年月日關(guān)閉按鈕)
- javascript實(shí)現(xiàn)的簡(jiǎn)易的DatePicker日歷
- javascript寫的日歷類(基于pj)
- JS學(xué)習(xí)之一個(gè)簡(jiǎn)易的日歷控件
- JS簡(jiǎn)單實(shí)現(xiàn)移動(dòng)端日歷功能示例
相關(guān)文章
一個(gè)簡(jiǎn)單的JavaScript 日期計(jì)算算法
這個(gè)一個(gè)簡(jiǎn)單的JavaScript日期計(jì)算算法代碼2009-09-09IE與Firefox下javascript getyear年份的兼容性寫法
IE與Firefox下javascript getyear年份導(dǎo)致日期不統(tǒng)一的解決方法2007-12-12實(shí)現(xiàn)javascript的延期執(zhí)行或者重復(fù)執(zhí)行的兩個(gè)函數(shù)
實(shí)現(xiàn)javascript的延期執(zhí)行或者重復(fù)執(zhí)行的兩個(gè)函數(shù)...2007-06-06JS date對(duì)象的減法處理實(shí)現(xiàn)代碼
JS date對(duì)象的減法處理實(shí)現(xiàn)代碼,需要的朋友可以參考下。2010-12-12JS 操作日期 順便實(shí)現(xiàn) 上一周 和 下一周 功能
JS本身沒有提供日期加減操作能力,所以借此寫了幾個(gè)方法,用以操作日期,主要是實(shí)現(xiàn)日期的加減2009-10-10js中格式化日期時(shí)間型數(shù)據(jù)函數(shù)代碼
js中格式化日期時(shí)間型數(shù)據(jù)函數(shù)代碼,需要的朋友可以參考下。2010-11-11