yunsh206

회원가입로그인

컴퓨터 Javascript 날짜 더하기

2020.11.26 00:41

RanomA 조회 수:449

두 개가 있는데 하나는 새로운 Date 객체를 생성해서 리턴해주는 것으로 해당 메소드가 호출된 객체의 값은 변하지 않는다. 나머지 하나는 Date 객체 그 자체가 바뀌는 것이다.

/**
 * @type   : prototype_function
 * @access : public
 * @desc   : 자바스크립트의 내장 객체인 Date 객체에 add 메소드를 추가한다. add 메소드는 구분과 입력값에 따라 날짜/시간을 더하고 뺀 새로운 Date 객체를 return 한다.
 * <pre>
 *     원래 일자가 2019-01-01 00:00:00이라고 하면
 *     var originDate = new Date(2019, 0, 1);
 *     var date = originDate.add("day", 45); ==> 2019-02-15 00:00:00 (45일 후), originDate는 변경없음
 *     or
 *     var date = originDate.add("month", -20); ==> 2017-05-01 00:00:00 (20개월 전), originDate는 변경없음
 *     or
 *     var date = originDate.add("second", 128); ==> 2019-01-01 00:02:08 (128초 후), originDate는 변경없음
 * </pre>
 * 위의 예에서 date 변수는 new Date()에서 구분과 입력값에 따라 더해진 값이다.
 * <pre>
 *     # type
 *       year   : 연수를 더하고 뺄 때
 *       month  : 개월수를 더하고 뺄 때
 *       day    : 일수를 더하고 뺄 때
 *       hour   : 시를 더하고 뺄 때
 *       minute : 분을 더하고 뺄 때
 *       second : 초를 더하고 뺄 때
 *     # param
 *       number 타입이어야 함
 *       범위의 제한은 없으므로 월의 경우 연도가 변경될 수 있고, 일의 경우 연도/월 변경될 수 있음. 시, 분, 초 모두 동일
 * </pre>
 * @return : 새롭게 생성되어 변경된 Date Object.
 * @author :
 */
Date.prototype.add = function(type, param) {
    if(typeof(param) != "number") {return this;}
    var returnDate = new Date(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());
    switch(type)
    {
        case "year":
            returnDate.setYear(this.getFullYear() + param);
            break;
        case "month":
            returnDate.setMonth(this.getMonth() + param);
            break;
        case "day":
            returnDate.setDate(this.getDate() + param);
            break;
        case "week":
            returnDate.setDate(this.getDate() + (param * 7));
            break;
        case "hour":
            returnDate.setHours(this.getHours() + param);
            break;
        case "minute":
            returnDate.setMinutes(this.getMinutes() + param);
            break;
        case "second":
            returnDate.setSeconds(this.getSeconds() + param);
            break;
        default:
            break;
    }
    return returnDate;
};

 

/**
 * @type   : prototype_function
 * @access : public
 * @desc   : 자바스크립트의 내장 객체인 Date 객체에 addThis 메소드를 추가한다. addThis 메소드는 구분과 입력값에 따라 해당 객체 자신의 날짜/시간을 더하고 뺀다.
 * <pre>
 *     현재 일시가 2019-01-01 00:00:00이라고 하면
 *     var originDate = new Date(2019, 0, 1);
 *     originDate.addThis("day", 45); ==> 2019-02-15 00:00:00 (45일 후)
 *     originDate.addThis("month", -20); ==> 2017-06-15 00:00:00 (20개월 전) (위에서 addThis 로 date 객체를 변경했기 때문임. 위의 행을 실행하지 않았다면 2017-05-01 00:00:00 임)
 *     originDate.addThis("second", 128); ==> 2017-06-15 00:02:08 (128초 후) (위에서 addThis 로 date 객체를 변경했기 때문임. 위의 행들을 실행하지 않았다면 2019-01-01 00:02:08 임)
 * </pre>
 * 위의 예에서 date 변수는 현재 날짜/시각 Date에서 구분과 입력값에 따라 변경될 Date 객체이다.
 * <pre>
 *     # type
 *       year   : 연수를 더하고 뺄 때
 *       month  : 개월수를 더하고 뺄 때
 *       day    : 일수를 더하고 뺄 때
 *       hour   : 시를 더하고 뺄 때
 *       minute : 분을 더하고 뺄 때
 *       second : 초를 더하고 뺄 때
 *     # param
 *       number 타입이어야 함
 *       범위의 제한이 없으므로, 월의 경우 연도가 변경될 수 있고, 일의 경우 연도/월 변경될 수 있음. 시, 분, 초 모두 동일
 * </pre>
 * @return : 변경된 Date Object.
 * @author :
 */
Date.prototype.addThis = function(type, param) {
    if(typeof(param) != "number") {return this;}
    switch(type)
    {
        case "year":
            this.setYear(this.getFullYear() + param);
            break;
        case "month":
            this.setMonth(this.getMonth() + param);
            break;
        case "day":
            this.setDate(this.getDate() + param);
            break;
        case "week":
            this.setDate(this.getDate() + (param * 7));
            break;
        case "hour":
            this.setHours(this.getHours() + param);
            break;
        case "minute":
            this.setMinutes(this.getMinutes() + param);
            break;
        case "second":
            this.setSeconds(this.getSeconds() + param);
            break;
        default:
            break;
    }
    return this;
};

 

번호 제목 글쓴이 날짜 조회 수 추천 수
835 리눅스 새 하드 장착하기 RanomA 2021.12.01 598 0
834 리눅스 SSH Network error: Software caused connection abort RanomA 2021.05.29 2016 0
833 인터넷 기본 설정 복원 창 띄우는 방법들 file RanomA 2021.05.01 1021 0
832 리눅스 디렉토리별 압축 파일 생성 쉘 스크립트 RanomA 2021.04.04 829 0
831 Javascript 숫자에 끊어 읽기 컴마(,) 추가 RanomA 2020.11.27 750 0
830 Javascript 문자열을 포맷 맞춰 날짜로, 날짜를 포맷 맞춘 문자열로 변환 RanomA 2020.11.26 716 0
» Javascript 날짜 더하기 RanomA 2020.11.26 449 0
828 Javascript 해당 연월의 마지막 날짜 가져오기 RanomA 2020.11.25 363 0
827 Javascript isNullOrEmpty RanomA 2020.11.25 684 0
826 Javascript 전화번호 포매팅 RanomA 2020.11.25 2307 0
825 Javascript IN RanomA 2020.11.18 259 0
824 Javascript LPAD RanomA 2020.11.17 580 0
823 Adobe Creative Cloud 업데이트 실패 184(혹은 C184) 오류 file RanomA 2020.09.08 1068 0
822 오라클 테이블 레이아웃 조회 Query RanomA 2020.01.13 2062 0
821 SQL Developer의 폰트 설정에서 폰트 목록이 안나타날 때 [6] file RanomA 2019.12.30 4868 0
820 Underscore( _ 문자)를 카멜 케이스(Camel Case)로 변환하기 RanomA 2019.12.06 1813 0
819 라이트룸(Adobe Lightroom) 한자/일본어용 폰트 변경 file RanomA 2018.06.06 2140 0
818 마녀의 빗자루와 악마와의 파티 RanomA 2018.03.23 889 0
817 크레인 안전 점검이 허술해진 게 이명박 때가 아니다? RanomA 2018.01.06 707 0
816 인도 중국의 분쟁 지역 file RanomA 2017.08.17 1291 0