天天看點

JS月曆,可獲得指定日期周數及星期幾

需求來自一個朋友:編寫一個簡易月曆。在文本框中輸入要查找的日期,程式可以計算出這一天處在該年份的第幾周,并且能判斷出這一天到底是星期幾。

應為要有互動,選擇了Js來實作,也算是 結對程式設計 的初試吧。 我将顯示部分用html 寫好,點選的按鈕觸發事件函數是check();

function onCheck(){ 
var Year = document.getElementById("year").value; //擷取文本框的“年” var theYear =Year * 1; //轉換為number類型 //alert(theYear); // 擷取月值 
var month = document.getElementById("month"); 
var index1=month.selectedIndex; var theMonth = month.options[index1].value; //擷取月值 
var day = document.getElementById("day"); 
var index2=day.selectedIndex; 
var theDay = day.options[index2].value;

// 輸入值判斷部分
...
//調用核心函數
days(theYear,theMonth,theDay); 
}      

核心函數days如下: 

JS月曆,可獲得指定日期周數及星期幾
JS月曆,可獲得指定日期周數及星期幾
function days(year,month,day) { 
    var days = 0;  //表示改日期為當年的第幾天
    //累加月天數
    for(var i = 1; i < month; i++ ){
    switch(i){
    //大月的情況加31
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:{
    days += 31;
    break;
    }
    //小月的情況加30
    case 4:
    case 6:
    case 9:
    case 11:{
    days += 30;
    break;
    }
    //二月的情況,根據年類型來加
    case 2:{
        if(isLeapYear(year)){
        days += 29; //閏年加29
        }
        else {
        days += 28;
        }
    break;
    }
    }
}
      day = day * 1;
      days += day;  //月天數之和加上日天數

    var date0 = new Date(year,0,1);   //當年的第一天是周幾
//   alert(date0.getDay());
    var date1 = new Date(year,month-1,day); //将日期值格式化,0-11代表1月-12月;
//   alert((days + date0.getDay()+6)/7);
    var nthOfWeek = Math.floor((days + date0.getDay()+6)/7);  //向下取整
//   alert(nthOfWeek);
    var toDay = new Array("星期天","星期一","星期二","星期三","星期四","星期五","星期六"); 
    //day.getDay();根據Date返一個星期中的某其中0為星期日 
    alert("該日期是一年中的第"+days+"天\n"+"     是第"+nthOfWeek+"周的"+toDay[date1.getDay()]);
}      

View Code

if (isNaN(theYear)|| theYear < 0) {
  alert("輸入有誤,請重新輸入");
  return ;
}

if((theMonth == 2 && theDay > 29 && isLeapYear(theYear))||(theMonth == 2 && theDay > 28 && !isLeapYear(theYear))) {
  alert("輸入有誤,請重新輸入");
  return ;
} 

if((theMonth == 4 || theMonth == 6 || theMonth == 9 || theMonth == 11) && theDay == 31 ) {
  alert("輸入有誤,請重新輸入");
  return ;
}       

繼續閱讀