js實現日曆的簡單演算法

2022-05-02 07:30:08 字數 2310 閱讀 9966

最近有用到日曆可需要編輯文字的日曆,為了繫結資料的方便,所以用js寫了一套日曆,其實思想也是很簡單。

實現步驟如下:

1:首先取得處理月的總天數

js不提供此引數,我們需要計算。考慮到閏年問題會影響二月份的天數,我們先編寫乙個判斷閏年的自編函式:

function is_leap(year)

2:接著定義乙個包含十二個月在內的月份總天數的陣列:

m_days=new array(31,28+is_leap(ynow),31,30,31,31,30,31,30,31,30,31);

3:m_days這個陣列裡,二月份的天數已經加入閏年的資訊:28+is_leap(ynow)。陣列元素從0開始,正好對應於js提供的date函式提供的getmonth返回值,即0表示一月,1表示二月,2表示三月,依此類推。

這樣,各月總數可以這樣取得:m_days[x]。其中,x為0至11的自然數。

4:計算處理月第一天是星期幾

可以使用date函式的getday取得,返回的值從0到6,0表示星期一,1表示星期二,2表示星期三,其餘依此類推。**如下(假設要處理的時間為2023年3月):

n1str=new date(2008,3,1);

firstday=n1str.getday();

有了月總天數和該月第一天是星期幾這兩個已知條件,就可以解決**所需行數問題:(當前月天數+第一天是星期幾的數值)除以七。**函式需要整數,因此,我們使用math.ceil來處理:

tr_str=math.ceil((m_days[mnow] + firstday)/7);

**中的tr標籤實際上代表**的行,因此變數tr_str是我們往下寫**的重要依據。

5:列印日曆**

可以使用兩個for語句巢狀起來實現:外層for語句寫行,內層for語句寫單元格。

單元格的自然序號是否代表有效日期非常關鍵,為此必須加入乙個過濾機制:僅列印有效的日期。有效的日期大於0小於小於等於處理月的總天數。

if(mnow<=0)else

if(mnow>=11)else

渲染時,需要先移除舊的日曆,再新增新的日曆。

var nstr = new

date();

var ynow =nstr.getfullyear();

var mnow =nstr.getmonth();

var dnow =nstr.getdate();

var mnow_real =mnow;

calendar(nstr,ynow,mnow,dnow);

mondetail(ynow,mnow_real);

function

mondetail(ynow,mnow)

function is_leap(year)

function

premonth()

else

calendar(nstr,ynow,mnow,dnow);

mondetail(ynow,mnow);

}function

nextmonth()

else

calendar(nstr,ynow,mnow,dnow);

mondetail(ynow,mnow);

}function

calendar(nstr,ynow,mnow,dnow)

}}

2017-2-20

/**parses string formatted as yyyy-mm-dd to a date object. 

* if the supplied string does not match the format, an

* invalid date (value nan) is returned.

* @param datestringinrange format yyyy-mm-dd, with year in

* range of 0000-9999, inclusive.

* @return date object representing the string.

*/

function parseiso8601(datestringinrange) )-(\d\d)-(\d\d)\s*$/,

date = new date(nan), month,

parts = isoexp.exec(datestringinrange);

if(parts)

} return date;

}

使用如下:

parseiso8601("2013-01-01");

js實現簡單的日曆

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

js實現日曆

有這樣乙個普通的日曆需求 第一反應就是找外掛程式,結果找到了,但是改起來非常麻煩,然後查下實現的原理,發現原來很簡單,於是自己實現了乙個。首先分析一下這個元件,每頁顯示的是 然後,神奇的date型別原來可以這樣獲取日期例項 new date 2018,4,0 2018年5月第一天的date例項 ne...

js隨筆 日曆的簡單實現(無css)

第一步,html 不能再多了,這樣已經不少了 第二步,js 分析 初始化日曆表 設定表頭 var setcalendartop function 1.顯示表頭日期 顯示表頭日期 var settopdate function year,month,today 2.獲得當前月的第一天是星期幾 第一天開...