본문 바로가기

DEV/Javascript

[Javascript]주차를 가져오자

반응형

fullcalendar를 사용하면서 필요했던 조회하고 있는 주차가 그달의 몇주차인지 계산해주는 함수입니다.

주차를 계산할 때에 기준은 목요일을 기준으로 계산하며 그 주에 목요일이 없는 경우에는 무조건 -1이 넘어오고

type이 'f'이면 첫째주 여부를 'l'이면 마지막주 여부를 Boolean 형으로 리턴해주며 type이 null or undefined일 경우에는 몇 주차인지 return해 줍니다.


중간중간 지인의 javascript 라이브러리인 라온이 활용된 부분이 있습니다.


소스코드

Date.prototype.getBizWeekOfMonth(type){
        var d = new Date(this.getTime());
        var d_first = new Date(this.getTime());
        var d_last = new Date(this.getTime());
        var d_temp = new Date(this.getTime());
 
        d_first.setDate(1);
        d_temp.setDate(1);
        
        d_last.setDate(1);
        d_last.addMonth(1);
        d_last.addDate(-1);
 
        var left = d_last.left(d_first);
        var tmp = [];
 
        var day_left = 4 - d.getDay();
        d.addDate(day_left);
 
        for(var i = 0; i <= left; i++) {
            if(d_temp.getDay() == 4){
                tmp.push(d_temp.toStr("yyyy-MM-dd"));
            }
            d_temp.addDate(1);
        }
 
        var idx = tmp.indexOf(d.toStr("yyyy-MM-dd"))
 
        if(type != undefined){
            var _type = type.toLowerCase();
 
            if(_type == "f"){
                return idx == 0;
            }
            else if(_type == "l"){
                return idx == tmp.length - 1;
            }
        }
 
        return idx != -1 ? idx + 1 : -1;
    }

실행 결과

/*2015-12-03 기준*/
new Date().getBizWeekOfMonth(); // 1
new Date().getBizWeekOfMonth('f'); // true
new Date().getBizWeekOfMonth('l'); // false


반응형