最近有用到日曆可需要編輯文字的日曆,為了繫結資料的方便,所以用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 = newdate();
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.獲得當前月的第一天是星期幾 第一天開...