練習乙個日曆例子,輸出乙個日曆,顯示當前日期為紅色
主要的理解和掌握點是:
使用date()函式
根據天數計算日曆的長度,主要是行,因為列是固定的,一周只有7天
根據天數計算各天放置的單元格位置
每月第一天的特殊處理
很多時候是從索引0開始計算,例如0-11代表12個月之類
乙個包括12個月的天數的陣列
效果圖:
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
**:
function is_leap(year) //是否為閏年
var nstr = new date(); //當前date資訊
var ynow = nstr.getfullyear(); //年份
var mnow = nstr.getmonth(); //月份
var dnow = nstr.getdate(); //今日日期
var n1str = new date(ynow, mnow, 1); //傳入獲取到的年月,並且日設定為1,獲取當月的第一天的日期資訊
var firstday = n1str.getday(); //當月第一天星期幾
var m_days = new array(31, 28 + is_leap(ynow), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); //各月份的總天數
//月份天數+第一天星期幾 除以7,獲取整數行數,然後取整,得到**所需要行數,即這個月的天數需要排多少行
var tr_str = math.ceil((m_days[mnow] + firstday) / 7);
//列印**第一行(有星期標誌)(表頭)
document.write("日一二
三四五六
"); //舉例是2023年12月,有31天
for (var i = 0; i < tr_str; i++)
document.write(""); //**的行結束
}document.write(""); //**結束
這裡有幾個重點:
math.ceil((m_days[mnow] + firstday) / 7)
a: 將當月的日數和1號左邊的空白格相加是因為第一天可能會排在其他空格裡面,所以要把第一天左邊的空格的數量也加上,
這樣才符合日曆的設計,除以7是因為乙個星期只有7天,然後進行取整,例如將4.5行取整為5行
idx = i * 7 + k;
a: 這是作為日曆的每乙個格的編號用的,因為如果不這樣使用的話,沒辦法將第一行輸出0-6,
然後第二行輸出7-13,然後第三行14-20......所以這裡需要用 i*7 +k 來實現這個格式
date_str = idx - firstday + 1;
a: firstday是獲取當月的第一天的週幾,用日曆的每乙個格的編號來減去 firstday 的話,可以確定每乙個格的日期,
日 一 二 三 四 五 六
-4 -3 -2 -1 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
但是考慮到沒有0的開始日期,所以需要額外加一
所以,(date_str <= 0 || date_str > m_days[mnow])
這個判斷就是為了過濾負數和超過31的日期
乙個日曆程式
year currentdate 年 month currentdate 月 hiddenid getusername 3 日一 二三四五 六 ym year currentdate month currentdate i 1do while i 33 j 1response.write do wh...
乙個日曆C程式
由於c語言當初沒學好,像c的結構體,檔案流,指標等都還弄不明白。下面是最近的乙個 關於列印日曆的。calendar 列印出某年的日曆,由使用者指出1月1日是星期幾以及該年是否為閏年。表示1月1日是星期幾的編碼 0 sunday 1 monday 2 tuesday 3 wednesday 4 thu...
乙個日曆小程式
include define sunday 0 define monday 1 define tuesday 2 define wednesday 3 define thursday 4 define friday 5 define saturday 6 void giveinstructions ...