記錄一次去哪兒網筆試題(2018/09/06)
輸入三個數 分別是 年份 月份 以及按星期幾開始排列(星期日是0 其他依次為1 2 3 4 5 6)
輸出兩個數 第一個表示該年月分 第一天在排列中是第幾列
第二個數 表示該年月份 最後一天在排列中是 第幾列
程式碼如下
<!DOCTYPE html>
<html>
<head>
<title>日期的小嚐試</title>
<meta charset="utf-8">
<script>
// 獲得一個指定時間的 Date物件 預設為2018年 1月
function getNewDate(oYear = 2018, oMonth = 0){
return new Date(oYear, oMonth-1);
}
// 判斷是否為閏年
function isLun(oYear){
return (oYear%4 == 0 && oYear%100 !=0) || oYear%400 ==0;
}
// 獲得一個月份 有多少天
function getNumberDay(oYear, oMonth){
// 判斷是否為閏年
var flag = isLun(oYear);
var days = 31;
switch(oMonth-1){
case 0: days = 31; break;
case 1: days = flag ? 29 : 28; break;
case 2: days = 31; break;
case 3: days = 30; break;
case 4: days = 31; break;
case 5: days = 30; break;
case 6: days = 31; break;
case 7: days = 31; break;
case 8: days = 30; break;
case 9: days = 31; break;
case 10: days = 30; break;
case 11: days = 31; break;
default: days = 31;
}
return days;
}
window.onload = function(){
var oBut = document.getElementById('but');
oBut.addEventListener('click', function(){
var oYear = parseInt(document.getElementById('year').value);
var oMonth = parseInt(document.getElementById('month').value);
var oStart = parseInt(document.getElementById('start').value);
var oDate = getNewDate(oYear, oMonth);
// 獲取具體某年某月 有多少天
var days = getNumberDay(oYear, oMonth);
// 獲取指定日期 是星期幾
var theDay = oDate.getDay();
// 判斷手動設定從 星期幾開始 是否大於 當前的日期
if(theDay >= oStart){
// 獲取日期開始的列
var start = theDay -oStart +1;
// 獲取日期結束的列
var end = (days-(7 -start +1))% 7;
} else{
var start = theDay - oStart +8;
var end = (days-(7 -start +1))% 7;;
}
console.log(oYear, oMonth)
console.log("幾月" + (oDate.getMonth()+1))
console.log("星期幾" + theDay)
console.log("從第幾天開始:"+ oStart)
console.log('開始日期:' +start);
console.log("結束日期" + end);
});
}
</script>
</head>
<body>
年份: <input type="text" id="year"> <br>
月份: <input type="text" id="month"> <br>
從第幾天開始: <input type="text" id="start"> <br>
<input type="button" value="確定" id="but">
</body>
</html>
總結:
js中月份是從0開始的,也就是說如果new Date(2018, 9, 1)則表示是 2018/10/01
這裡面求開始列的時候 是根據設定的開始日期 和當前日期作比較
設定日期 < 當前日期 則列數表示為 當前日期 - 設計日期 +1
設定日期 > 當前日期 則列數表示為 當前日期 - 設計日期 +1 + 7