1. 程式人生 > >記錄一次去哪兒網筆試題(2018/09/06)

記錄一次去哪兒網筆試題(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