根據年月周獲取 當週的日期

在工作中碰到了一個需求,根據用戶選擇的年月以及當月的第幾周,輸出這周的開始日期與結束日期,在網上搜了一下,發現大家的第一週一般都是從第一個週一開始計算的,與我們從本月一號開始算第一週的需求不太一致,於是自己寫了一個方法:

        // 獲取指定月份的天數
        function mGetDate(year, month){
            var d = new Date(year, month, 0);
            return d.getDate();
        }
		// 根據年月日獲取是周幾
        function getMonthWeek(year, month, day) {
            var date = new Date(year, month-1, day), w = date.getDay(), d = date.getDate();
            return Math.ceil(
                (d + 6 - w) / 7
            );
        }
		 // 獲取輸入周的開始與結束日期
        function getWeekDate(year, month, week){
            var days = mGetDate(year,month);
            var weekArr = [];
            for(var i=1;i<=days;i++){
                var weekNum = getMonthWeek(year,month,i);
                console.log(weekNum,i)
                var data = new Date(year, month-1, i);
                if(i==1){
                    weekArr[0] = new Array();
                    weekArr[0].push(formatTime(data));
                }else{
                    var weekNumLast = getMonthWeek(year,month,i-1)
                    if(weekNumLast == weekNum){
                        if(data.getDay()==1){
                            weekArr[weekNum-1] = new Array();
                            weekArr[weekNum-1].push(formatTime(data));
                        }else{
                            weekArr[weekNum-1].push(formatTime(data));
                        }
                    }else{
                        if(data.getDay()==0){
                            weekArr[weekNum-2].push(formatTime(data))
                        }else{
                            weekArr[weekNum-1].push(formatTime(data))
                        }
                    }
                }
            }
            return weekArr[week-1][0],weekArr[week-1][weekArr[week-1].length-1];
        }
		// 時間格式化
        function formatTime (date){
            const year = date.getFullYear()
            const month = date.getMonth() + 1
            const day = date.getDate()
            return [year, month, day].map(formatNumber).join('-');
        }
        function formatNumber (n){
            n = n.toString()
            return n[1] ? n : '0' + n
        }

        getWeekDate(2020,7,2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章