본문 바로가기

프로그래밍관련/javascript

javascript date, 날짜계산기

/**
 * 날짜계산기
 * 아무것도 안던지면 오늘날짜 반환
 * 오늘일자 기준 년,월,일 +- 계산해드림
 * @param addYear : 년도계산 +10, -10 등등
 * @param addMonth : 월계산 +10, -10 등등
 * @param addDay : 일자계산 +10, -10 등등
 * @param token : 기본값 "-"
 * @return yyyy-mm-dd
 */
function getDate(addYear, addMonth, addDay, token){
    token = token == undefined || token == null ? "-" : token;
    addYear = addYear == null ? 0 : addYear;
    addMonth = addMonth == null ? 0 : addMonth;
    addDay = addDay == null ? 0 : addDay;

    var now = new Date();
    var ry = now.getFullYear();
    var rm = now.getMonth() + 1;
    var rd = now.getDate();
   
    if(addYear != 0){//cal year
        ry = ry + addYear;
    }
   
    if(addMonth != 0){//cal month
        var isRun = true;
        rm = rm + addMonth;
        while(isRun == true){
            if(rm > 12){
                ry++;
                rm = rm - 12;
            }else if(rm < 1){
                ry--;
                rm = 12 + rm;
            }
           
            if(rm > 0 && rm < 13){
                isRun = false;
            }
        }
    }

    var cal = new Date(ry, rm, 0);
    if(rd > cal.getDate())
        rd = cal.getDate();
    if(addDay != 0){
        rd = rd + addDay;
        if(rd > cal.getDate() || rd < 1){
            var isRun = true;
            while(isRun == true){
                if(rd > cal.getDate()){
                    rd = rd - cal.getDate();
                    rm++;
                    if(rm > 12){
                        ry++;
                        rm = 1;
                    }
                }
                if(rd < 1){
                    rm--;
                    if(rm < 1){
                        ry--;
                        rm = 12;
                    }
                    cal = new Date(ry, rm, 0);
                    rd = cal.getDate() + rd;
                }

                cal = new Date(ry, rm, 0);
                if(rd <= cal.getDate() && rd >= 1)
                    isRun = false;
            }
        }

        if(rd > cal.getDate() || rd < 1){
            cal = new Date(ry, rm, 0);
        }
    }
       
    if(rm.toString().length < 2)
        rm = '0' + rm;
    if(rd.toString().length < 2)
        rd = '0' + rd;
   
    return ry + token + rm + token + rd;
}

ex)
var today = getDate();
today = '2011-04-27';

var today = getDate(null, null, null, '.');
today = '2011.04.27';

var day1 = getDate(0, -1, 0);
day1 = '2011-03-27';

ok? ^^;